【发布时间】:2014-09-26 20:04:47
【问题描述】:
最近我的一个同事这样说:
当使用不同的会话来产生和消费消息时,不能保证消息按照它们产生的顺序传递。
现在我知道 JMS 通常不保证消息传递顺序,但是这种“多会话”角度对我来说是新的。这有什么道理吗?
【问题讨论】:
最近我的一个同事这样说:
当使用不同的会话来产生和消费消息时,不能保证消息按照它们产生的顺序传递。
现在我知道 JMS 通常不保证消息传递顺序,但是这种“多会话”角度对我来说是新的。这有什么道理吗?
【问题讨论】:
根据the JMS Spec(第 4.4.10 节消息顺序),仅保证从会话发送到目的地的消息顺序(即使这样也有一些警告)。
这意味着:
仅定义了从一个会话发送到同一目的地的两条消息的顺序。。 p>
请注意,给定的 JMS 实现可能通常按照(全局)生成项目的顺序交付项目。但是你不应该以任何方式依赖它,因为它基本上是一个“尽力而为”的事情:如果他们能够管理它,它通常会更好。如果不能,它们仍然符合规范,您的应用程序必须能够处理。
tl;dr 是的,你的同事是对的。再次注意,即使是单一会话/单一目的地的情况下的保证也不是很强,尤其是在涉及不同消息选项的情况下(有关详细信息,请参阅链接的 PDF)。
【讨论】:
由于 JMS 是“异步”的,因此永远无法保证消息传递的顺序。
【讨论】: