JMS消息ID是否表示JMS服务器收到消息的顺序?订单传递消息

时间:2016-12-16 07:01:48

标签: java jms

如果应用程序在单线程中向TOPIC [JMS提供程序Tibco]发布消息而接收方也在单线程中读取消息。 仍然经历罕见的无序交付给接收者。

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

目前的设计是否适合发送给接收方?并依赖JMS消息ID来验证JMS提供者收到的消息的顺序是否正确?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

@Stephan的回答是正确的。

我只想补充一点,javadoc声明消息ID是在发送消息时生成的,而不是在收到消息时生成的。因此,即使ID是连续的,它们也不会告诉您交付的顺序。

答案 2 :(得分:0)

JMS生成的MessageID应该是唯一的。但是,JMS提供程序用于生成MessageID的逻辑可以是从数字的简单增量到复杂算法的使用。您不应该假设MessageID将是顺序的。如果您的应用程序需要邮件传递顺序,那么您可以查看使用组中邮件的邮件组,并且可以等到收到组中的所有邮件后再开始处理邮件。