1

最近我的一个同事这样说:

当使用不同的会话来产生和消费消息时,不能保证消息按照它们产生的顺序被传递。

现在我知道 JMS 通常不保证消息传递顺序,但是这种“多会话”角度对我来说是新的。有没有道理呢?

4

2 回答 2

2

根据JMS 规范(第 4.4.10 节消息顺序),只能保证从会话发送到目的地的消息顺序(即使这样也有一些警告)。

这表示:

  • 未定义从同一会话发送到两个不同目的地的两条消息的顺序
  • 未定义从两个不同会话发送到同一目的地的两条消息的顺序
  • 未定义从两个不同会话发送到两个不同目的地的两条消息的顺序。

定义了从一个会话发送到同一目的地 的两条消息的顺序。

请注意,给定的 JMS 实现可能通常会按照(全局)生成项目的顺序交付项目。但是你不应该以任何方式依赖它,因为它基本上是一个“尽力而为”的事情:如果他们能够管理它,它通常会更好。如果不能,它们仍然在规范范围内,您的应用程序必须能够处理。

tl;博士是的,你的同事是正确的。再次注意,即使是单一会话/单一目的地的情况下的保证也不是很强,尤其是在涉及不同消息选项的情况下(有关详细信息,请参阅链接的 PDF)。

于 2012-05-11T08:35:32.377 回答
1

由于 JMS 是“异步的”,因此永远无法保证消息传递的顺序。

于 2014-09-26T12:04:47.610 回答