2011-03-15 84 views
2

我有被订阅,它发送其内容最终被持久化到数据库消息的主题的MDB。消息驱动Bean和消息的消费秩序

我知道MDB是合并的,因此容器能够并行处理多个传入消息。就我而言,在这些消息被消耗(并坚持)的顺序是非常重要的。我不想一个MDB实例池以不同的顺序消耗,然后坚持的消息,因为他们得到了出版的JMS话题。

可这是一个问题?如果是这样,有没有告诉容器使用消息时要遵循严格的进货订单的一种方式?

回答

2

there:

复制到确保收到顺序相匹配,其中客户端发送消息的顺序,必须做到以下几点:

  • 设定最高豆式无池到1为MDB。这确保了MDB是消息的唯一使用者。

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

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

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

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

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

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