我有被订阅,它发送其内容最终被持久化到数据库消息的主题的MDB。消息驱动Bean和消息的消费秩序
我知道MDB是合并的,因此容器能够并行处理多个传入消息。就我而言,在这些消息被消耗(并坚持)的顺序是非常重要的。我不想一个MDB实例池以不同的顺序消耗,然后坚持的消息,因为他们得到了出版的JMS话题。
可这是一个问题?如果是这样,有没有告诉容器使用消息时要遵循严格的进货订单的一种方式?
我有被订阅,它发送其内容最终被持久化到数据库消息的主题的MDB。消息驱动Bean和消息的消费秩序
我知道MDB是合并的,因此容器能够并行处理多个传入消息。就我而言,在这些消息被消耗(并坚持)的顺序是非常重要的。我不想一个MDB实例池以不同的顺序消耗,然后坚持的消息,因为他们得到了出版的JMS话题。
可这是一个问题?如果是这样,有没有告诉容器使用消息时要遵循严格的进货订单的一种方式?
复制到确保收到顺序相匹配,其中客户端发送消息的顺序,必须做到以下几点:
设定最高豆式无池到1为MDB。这确保了MDB是消息的唯一使用者。
如果您的MDB部署在群集上,请将它们部署到群集中的单个节点[...]。
您应该能够将MDB池的大小限制为1,从而确保以正确的顺序处理消息。
当然,如果你仍然需要一些并行性,那么你有几个选项,但这取决于数据。
如果某些消息具有某些共同点,并且处理顺序仅在该组消息中具有共同的值,那么您可能需要拥有多个主题或使用队列和线程池。
另一方面,如果与消息到达相关的逻辑的某些部分可以并行发生,而其他位不能,那么您需要将逻辑分成并行 - 并行和并行不正确的部分,并相应地处理这些位。