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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发送到JMS队列的消息将仅由单个消费者使用?相关的知识,希望对你有一定的参考价值。

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

还有另一个名为consumer2的消费者。但是消息message1已经被consumer1消耗,所以它不适用于consumer2

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

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

答案

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

有一些选项取决于消息传递代理,以使消费者独占,以便只有该消费者可以从队列中读取消息,而其他消费者坐下并等待独占消费者离开,这使得他们成为一种备份。

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

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

以上是关于发送到JMS队列的消息将仅由单个消费者使用?的主要内容,如果未能解决你的问题,请参考以下文章

JMS 工作流 - 混合队列和主题

JMS

activemq jms使用

Oracle OSB 收集具有相同 ID 的消息并将它们发送到 JMS 队列

如果在消费消息后出现任何错误,如何将消息保存在 JMS 消息队列中?

Jms:具有多个消费者的 Pub/Sub