消息驱动Bean和消息使用顺序

时间:2011-03-15 15:44:05

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

我有一个MDB,它订阅了一个主题,该主题将内容最终保存到数据库的消息发送。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

there:

复制

要确保收据订单与客户端发送邮件的顺序相匹配,您必须执行以下操作:

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

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

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