我有一个 MDB,它订阅了一个主题,该主题发送消息,其内容最终保存到数据库。
我知道 MDB 是池化的,因此容器能够并行处理多个传入消息。就我而言,这些消息的消费(然后持久化)顺序很重要。我不希望 MDB 实例池在 JMS 主题中发布消息时使用并以不同的顺序保留消息。
这会是一个问题吗?如果是这样,是否有办法告诉容器在消费消息时遵循严格的传入顺序?
最佳答案
复制自 there:
为了确保接收顺序与客户端发送消息的顺序匹配,您必须执行以下操作:
将 MDB 的 max-beans-in-free-pool 设置为 1。这确保了 MDB 是消息的唯一使用者。
如果您的 MDB 部署在集群上,请将它们部署到集群中的单个节点,[...]。
- 为了确保事务回滚和恢复时的消息排序,请配置自定义连接工厂,并将 MessagesMaximum 设置为 1,并确保未配置重新传递延迟。欲了解更多信息,请参阅[...]。
关于java - 消息驱动Bean和消息消费顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314214/