发送到JMS队列的消息将仅由单个消费者使用?

时间:2017-12-23 10:05:08

标签: java java-ee jms

发件人向队列发送邮件的情况,例如message1sender1发送到队列。现在,名为consumer1的使用者连接到队列并读取消息message1

还有另一个名为consumer2的消费者。但message1已消费consumer1消息,因此consumer2无法使用该消息。

当下一条消息到达queue时,consumer2如果在consumer1之前读取队列,则可能会收到该消息。

这是否意味着一个消费者是否先在另一个消费者之前读取队列以便从queue获得第一条消息?

1 个答案:

答案 0 :(得分:1)

这是JMS中队列的本质,消息被发送给一个消费者,一旦消失,下一个消费者就可以获得下一个消息,依此类推。这通常被称为竞争消费者或负载平衡。当作业或工作项目入队时,消费者可以共享工作,当与队列中的项目相关联的工作可能花费大量时间时,这允许更高的吞吐量。

根据消息传递代理有一些选项可以使消费者独占,这样只有那个消费者可以从队列中读取消息,而其他消费者坐着等待独占消费者离开,这使他们成为一种备份。

其他选项是使用Apache Camel之类的东西将给定的消息路由到多个队列,或者使用AcitveMQ虚拟主题将消息发送到主题,然后将该消息排入特定的消费者队列。

解决方案取决于您正在使用的经纪人以及您尝试解决的问题,这些问题都没有在您的问题中明确说明。