发件人向队列发送邮件的情况,例如message1
由sender1
发送到队列。现在,名为consumer1
的使用者连接到队列并读取消息message1
。
还有另一个名为consumer2
的消费者。但message1
已消费consumer1
消息,因此consumer2
无法使用该消息。
当下一条消息到达queue
时,consumer2
如果在consumer1
之前读取队列,则可能会收到该消息。
这是否意味着一个消费者是否先在另一个消费者之前读取队列以便从queue
获得第一条消息?
答案 0 :(得分:1)
这是JMS中队列的本质,消息被发送给一个消费者,一旦消失,下一个消费者就可以获得下一个消息,依此类推。这通常被称为竞争消费者或负载平衡。当作业或工作项目入队时,消费者可以共享工作,当与队列中的项目相关联的工作可能花费大量时间时,这允许更高的吞吐量。
根据消息传递代理有一些选项可以使消费者独占,这样只有那个消费者可以从队列中读取消息,而其他消费者坐着等待独占消费者离开,这使他们成为一种备份。
其他选项是使用Apache Camel之类的东西将给定的消息路由到多个队列,或者使用AcitveMQ虚拟主题将消息发送到主题,然后将该消息排入特定的消费者队列。
解决方案取决于您正在使用的经纪人以及您尝试解决的问题,这些问题都没有在您的问题中明确说明。