【问题标题】:Java: JMS message delivery order for different sessionsJava:不同会话的 JMS 消息传递顺序
【发布时间】:2014-09-26 20:04:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jms


    【解决方案1】:

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

    这意味着:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-26
        • 2012-12-07
        • 2014-05-18
        • 2011-01-29
        • 1970-01-01
        • 2014-08-11
        • 2014-02-17
        • 1970-01-01
        相关资源
        最近更新 更多