2009-10-09 23 views
5

我们目前正在通过JMS使用IBM MQ,但似乎正在推送比它能处理更多的消息 - 奇怪的是,问题似乎是间歇性的。WebSphere MQ低延迟消息传递 - 它是否具有JMS(或类似JMS)的API?

消息是价格,因此不需要保证,只需要快速发送。

由于IBM有一个Low Latency product,我想知道这是否是更好的解决方案 - 但它似乎没有JMS api,或者至少不容易看到。

任何人都知道,如果有一个JMS API到低延迟的产品,或JMS样,如果“独一无二”的API它拥有的是...

或者,MQ调整指针也将不胜感激。 .. :)

回答

5

当然,低延迟消息产品会更适合您的问题,我正在研究一个项目,我们使用名为LBM的低延迟消息传递产品29West做类似的事情。它没有JMS API,我怀疑大多数低延迟空间的产品不会。有大量功能与这些类型的产品(例如持久性,选择器等)结合使用时没有意义。我们发现将我们自己的简单API写在消息传递产品的顶部是非常简单的,并且使用灵活性来稍后更改产品,并将我们从JMS api的一些大量和冗长中解放出来。

要考虑的另一个选项是JGroups

29West已将JMS支持添加到其邮件产品系列。

+0

谢谢 - 我们没有通常过量的数量或严格的延迟要求,我们以前的解决方案Fiorano工作得很好。不幸的是,公司标准决定IBM MQ :( – 2009-10-10 23:35:07

1

关于“针对MQ调整的指针”,在SupportPacs page上,每个平台都有性能评估和特定的建议。向下滚动到名为MP *的SupportPacs并查找相应的版本和平台。大量和小型消息,持久性和非持久性,吸气剂和推杆数量的变化等进行了测试各种情况。

1

作为LLM产品的前开发人员,我可以说,它确实或至少做过。请参阅下面的摘录我从公开可用的信息中心为版本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客户端提供Java消息服务(JMS)接口 LLM。使用JMS接口与LLM允许与其他消息传递提供商的通用接口,并通过 加速应用程序开发,允许开发人员使用他们熟悉的接口。使用 JMS接口最适用于使用通用 消息功能的应用程序,其中可以集中管理设置。 这包括许多传统的客户端应用程序。法学硕士JMS客户 其中应用程序依赖于LLM 特定功能或需要与LLM显著应用 相互作用并不正常工作。尽管通过使用JMS接口添加了一些延迟,但它仍然提供非常低的延迟和高吞吐量的消息传递。

LLM JMS客户端支持大多数LLM客户端功能,但不支持在一个层内运行的服务器功能,或者不支持 平衡发送器。

LLM基于做直接生产者到消费者的消息。 JMS是 通常使用消息服务器和JMS函数 要求消息服务器实现使用LLM JMS 客户端时不可用。这包括所有的点对点消息传递(队列)以及恢复功能 。 LLM JMS客户端设计为在JSE 环境中运行,不支持应用程序服务器扩展或XA 事务。

的LLM JMS客户端如何实现JMS

法学硕士JMS客户端实现每个 未暴露于外部的一个实现类的基本JMS对象。这些对象的 子类是使用相同的 实现类实现的。这意味着只有两个被管理的对象,ConnectionFactory和Destination。一个LLM定义 的ConnectionFactory可以转换为TopicConnectionFactory的和 的QueueConnectionFactory和LLM定义目的地可以转换为 主题和队列。 Connection,Session, MessageProducer和MessageConsumer也是如此。来自一个 供应商的目标对象必须与同一供应商的连接一起使用。但是, 可能会将由一个JMS提供程序生成的消息发送到另一个JMS提供程序。发送由另一个JMS提供者 创建的消息是不是发送由LLM JMS客户端创建的消息一样高效,但提供了这个功能,很容易让一个 应用弥合从一个供应商到另一个。

LLM JMS客户端不实现点对点消息传递 模型(队列),但是可以创建所有JMS对象。

的LLM JMS客户端需要的JVM至少爪哇5.

的LLM JMS客户端定义所有六个消息类型的对象(消息, BytesMessage,MapMessage消息,ObjectMessage,StreamMessage和 的TextMessage)。从JMS向JMS发送消息时,JMS标头 指示消息的类型。如果缺少JMS标头(从非JMS生产者发送消息时常见的是 ),则LLM JMS 客户端会尝试从内容中推断消息的类型。 正常情况下,消息将显示为BytesMessage,但如果消息 以UTF-8 BOM开头或显示为XML,则它将被解释为 TextMessage。 TextMessages被认为是UTF-8编码......