如果应用程序在单线程中向TOPIC [JMS提供程序Tibco]发布消息而接收方也在单线程中读取消息。 仍然经历罕见的无序交付给接收者。
依靠JMS消息ID来验证传递给JMS提供程序的消息的排序。
目前的设计是否适合发送给接收方?并依赖JMS消息ID来验证JMS提供者收到的消息的顺序是否正确?
答案 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将是顺序的。如果您的应用程序需要邮件传递顺序,那么您可以查看使用组中邮件的邮件组,并且可以等到收到组中的所有邮件后再开始处理邮件。