Java:不同会话的JMS消息传递顺序

时间:2012-05-11 08:19:41

标签: java jms

最近我的一位同事说:

  

使用不同的会话来制作和使用消息时,无法保证消息的发送顺序与生成消息的顺序相同。

现在我知道JMS一般不保证邮件传递顺序,但这个“多会话”角度对我来说是新的。这有什么道理吗?

2 个答案:

答案 0 :(得分:2)

根据the JMS Spec(第4.4.10条消息顺序),只保证从会话发送到目的地的消息顺序(即使有一些警告)。

这意味着:

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

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

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

tl; dr 是的,你的同事是对的。请再次注意,即使是一个会话/一个目标的情况下的保证也不是很强,特别是如果涉及不同的消息选项(详见链接的PDF)。

答案 1 :(得分:1)

由于JMS是“异步”的,因此永远不会保证邮件传递顺序。