【问题标题】:Message Driven Bean and message consumption order消息驱动Bean和消息消费顺序
【发布时间】:2011-07-15 21:54:59
【问题描述】:

我有一个 MDB 订阅了一个主题,该主题发送的消息的内容最终被持久化到一个数据库中。

我知道 MDB 是池化的,因此容器能够并行处理多个传入消息。在我的例子中,这些消息被消费(然后被持久化)的顺序很重要。我不希望 MDB 实例池在消息在 JMS 主题中发布时以不同的顺序使用并持久保存消息。

这可能是个问题吗?如果是这样,有没有办法告诉容器在消费消息时遵循严格的传入顺序?

【问题讨论】:

    标签: java jakarta-ee jms message-driven-bean


    【解决方案1】:

    复制自there:

    为确保接收顺序与客户端发送消息的顺序一致,您必须执行以下操作:

    • 将 MDB 的 max-beans-in-free-pool 设置为 1。这可确保 MDB 是消息的唯一使用者。

    • 如果您的 MDB 部署在集群上,请将它们部署到集群中的单个节点,[...]。

    • 为确保事务回滚和恢复时的消息顺序,配置自定义连接工厂,将 MessagesMaximum 设置为 1,并确保未配置重新传递延迟。有关更多信息,请参阅 [...]。

    【讨论】:

      【解决方案2】:

      您应该能够将 MDB 池的大小限制为 1,从而确保以正确的顺序处理消息。

      当然,如果你仍然想要一些并行性,那么你有几个选择,但这真的取决于数据。

      如果某些消息有共同点,并且处理顺序只在具有共同值的那组消息中很重要,那么您可能需要有多个主题,或者使用队列和线程池。

      另一方面,如果与消息到达相关的逻辑的某些部分可以并行发生,而其他位则不能,那么您需要将逻辑拆分为并行-ok 和 parallel-not-ok 部分,并相应地处理这些位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        • 2011-08-05
        • 2012-02-27
        • 1970-01-01
        相关资源
        最近更新 更多