最近我的一个同事这样说:
当使用不同的会话来产生和消费消息时,不能保证消息按照它们产生的顺序被传递。
现在我知道 JMS 通常不保证消息传递顺序,但是这种“多会话”角度对我来说是新的。有没有道理呢?
根据JMS 规范(第 4.4.10 节消息顺序),只能保证从会话发送到目的地的消息顺序(即使这样也有一些警告)。
这表示:
只定义了从一个会话发送到同一目的地 的两条消息的顺序。
请注意,给定的 JMS 实现可能通常会按照(全局)生成项目的顺序交付项目。但是你不应该以任何方式依赖它,因为它基本上是一个“尽力而为”的事情:如果他们能够管理它,它通常会更好。如果不能,它们仍然在规范范围内,您的应用程序必须能够处理。
tl;博士是的,你的同事是正确的。再次注意,即使是单一会话/单一目的地的情况下的保证也不是很强,尤其是在涉及不同消息选项的情况下(有关详细信息,请参阅链接的 PDF)。
由于 JMS 是“异步的”,因此永远无法保证消息传递的顺序。