我们目前正在通过JMS使用IBM MQ,但似乎处理的消息超过了它的处理能力-奇怪的是,这个问题似乎是间歇性的。
消息是价格,因此不需要保证,只需快速发送即可。
由于IBM有一个Low Latency product,我想知道这是不是更好的解决方案-但它似乎没有JMS,或者至少不容易看到。
任何人都知道Low Latency产品中是否有JMS api,或者它拥有的“独特”API是否类似于JMS……
或者,用于MQ调优的指针也会受到欢迎……:)
发布于 2009-10-10 07:51:30
毫无疑问,低延迟消息传递产品会更适合你的问题,我正在做一个项目,我们使用29West的低延迟消息传递产品LBM来做非常相似的事情。它没有JMS api,我怀疑大多数低延迟领域的产品都不会。有大量的功能与这些类型的产品(例如持久性、选择器等)组合在一起是没有意义的。我们发现,在消息传递产品之上编写我们自己的简单api相当容易,并使用户可以灵活地在以后更改产品,并将我们从JMS api的一些批量和冗长中解放出来。
另一个要考虑的选择是JGroups。
29West已经将JMS支持添加到他们的消息传递产品线中。
发布于 2010-06-13 11:50:35
关于“MQ调优指针”,在SupportPacs page上有每个平台的性能评估和特定的建议。向下滚动到名为MP*的SupportPacs,然后查找适当的版本和平台。使用大消息和小消息、持久消息和非持久消息、getter和putter数量的变化等测试了各种场景。
发布于 2015-09-16 10:50:11
作为LLM产品的前开发人员,我可以说它确实是,或者至少是这样。下面是我从公开的infocenter for version 2.6中摘录的内容
这就是说,根据我的记忆,MQ的全部要点是保证交付。这是有时间和地点的,但它在延迟和带宽方面是有代价的。
LLM有一个根本不同的目的;它有可靠的交付:也就是说,如果它交付失败,你将简单地知道它交付失败。这些消息的可恢复性仅受以下因素的限制:您愿意保留多少缓存或从磁盘中回调,以及您愿意容忍在延迟进程的情况下等待恢复多长时间。在您的情况下,您可能不关心恢复。我不能推测LLM是否适合你。我可以说的是,从我以前作为开发人员和后来作为客户的角度来看,我发现这两者之间几乎没有相似之处,而LLM在这种应用程序中的性能将MQ完全打乱了。我也很少使用java/jms这一端,而是专注于C/C++,所以对此持保留态度。我只知道它做到了,并知道在谷歌上哪里可以找到它。
http://www-01.ibm.com/support/knowledgecenter/SSQPD3_2.6.0/com.ibm.wllm.doc/api/javadoc/messaging/com/ibm/llm/jms/package-summary.html
包com.ibm.llm.jms说明
为LLM JMS客户端实现特定于提供程序的公共类。
JMS中使用的大多数接口都是由公共JMS接口定义的。但是,JMS规范不包括配置JMS客户端所需的类和接口。
有关JMS类和方法的信息,请参阅JMS API文档。
引言
LLM JMS客户端为LLM提供了Java消息服务(JMS)接口。对LLM使用JMS接口允许与其他消息传递提供程序使用公共接口,并通过允许开发人员使用他们熟悉的接口来加快应用程序开发。使用JMS接口最适合使用通用消息传递功能的应用程序,其中的设置可以集中管理。这包括许多传统的客户端应用程序。在应用程序依赖于LLM特定功能或需要与LLM进行大量应用程序交互的情况下,LLM JMS客户端无法正常工作。虽然使用JMS接口增加了一些延迟,但它仍然提供非常低的延迟和高吞吐量的消息传递。
LLM JMS客户端支持大多数LLM客户端功能,但不支持在层内运行的服务器功能,也不支持负载均衡发送器。
LLM基于直接进行生产者到消费者的消息传递。JMS通常是使用消息服务器和JMS功能实现的,这要求在使用LLM JMS客户端时消息服务器不可用。这包括所有点对点消息传递(队列)以及恢复功能。LLM JMS客户端设计为在JSE环境中运行,不支持应用服务器扩展或XA事务。
LLM JMS客户端如何实现JMS
LLM JMS客户端使用一个不对外公开的实现类来实现每个基本的JMS对象。这些对象的子类使用相同的实现类来实现。这意味着只有两个受管理对象,即ConnectionFactory和Destination。LLM定义的ConnectionFactory可以转换为TopicConnectionFactory和QueueConnectionFactory,LLM定义的目的地可以转换为主题和队列。Connection、Session、MessageProducer和MessageConsumer也是如此。来自一个提供程序的目标对象必须与同一提供程序的连接一起使用。但是,可以将一个JMS提供程序生成的消息发送给另一个JMS提供程序。发送由另一个JMS提供程序创建的消息不如发送由LLM JMS客户机创建的消息有效,但提供此功能是为了使应用程序可以轻松地从一个提供程序桥接到另一个提供程序。
LLM JMS客户端不实现点对点消息传递模型(队列),但可以创建所有JMS对象。
LLM JMS客户端要求JVM至少为Java 5。
LLM JMS客户端定义了所有六种消息类型对象(Message、BytesMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage)。从JMS向JMS发送消息时,JMS标头指示消息的类型。如果缺少JMS头(当从非JMS生产者发送消息时,这种情况很常见),LLM JMS客户端会尝试从内容中推断出消息的类型。通常,消息将显示为BytesMessage,但如果消息以UTF-8BOM开头或显示为XML,它将被解释为TextMessage。假设TextMessages是用UTF-8编码的……
https://stackoverflow.com/questions/1543996
复制相似问题