2016-12-16 130 views
1

如果应用程序在单线程中发布消息给TOPIC [JMS提供商Tibco]并且接收器也在单线程中读取消息。 仍然遇到罕见的无序送达接收器。JMS消息ID是否表示JMS服务器接收消息的顺序?消息的订单传递

依靠JMS消息ID来验证传递给JMS提供者的消息的顺序。

当前的设计是否适合向接收器传送?并依赖JMS消息ID来验证JMS提供者接收的消息的顺序是否正确?

回答

0

根据Java Doc,messageId仅被指定为唯一的。 http://docs.oracle.com/javaee/5/api/javax/jms/Message.html#getJMSMessageID()

由于没有说它与消息排序有关,我建议它不是,并且建议不要将它用于这种目的。

+0

谢谢stephen ...根据JMS API,它只是需要是唯一的,可能不是为了......但很难向团队解释;)....是目前的设计将确保订单交付? – Mahesh

+1

@Mashesh如果'现在的设计''仍然遇到罕见的无序发货',显然不是。 – EJP

+0

@Mahesh。应该很容易向团队解释。简而言之,根据规范说明*,您/他们一直在做出无效的假设*。 –

0

@斯蒂芬的回答是正确的。

我只想补充一点,javadoc指出在发送消息时生成消息标识,而不是在收到消息时生成消息标识。所以即使这些ID是连续的,他们也不会告诉你交货的顺序。

0

由JMS生成的MessageID预计是唯一的。然而,JMS提供程序用于生成MessageID的逻辑可能是从简单的数字增量到复杂算法的使用。你不应该假设MessageIDs是连续的。如果您的应用程序需要消息传递顺序,那么您可以使用消息组来查看消息组的顺序,并且您可以等到组中的所有消息都已收到,然后再开始处理消息。