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

Java 发送到JMS队列的消息将仅由单个使用者使用?,java,jakarta-ee,jms,Java,Jakarta Ee,Jms,发送者向队列发送消息的一种情况,例如message1由sender1发送到队列。现在,名为consumer1的消费者连接到队列并读取消息message1 另一个消费者名为consumer2。但是消息message1已被consumer1使用,因此它将不可用于consumer2 当下一条消息到达队列时,消费者2如果在消费者1之前读取队列,可能会收到该消息 这是否意味着一个消费者在另一个消费者之前读取队列,以便从队列中获取第一条可用消息?这是JMS中队列的性质,消息被发送到一个消费者,一旦确认,消息

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

另一个消费者名为
consumer2
。但是消息
message1
已被
consumer1
使用,因此它将不可用于
consumer2

当下一条消息到达
队列
时,
消费者2
如果在
消费者1
之前读取队列,可能会收到该消息


这是否意味着一个消费者在另一个消费者之前读取队列,以便从
队列中获取第一条可用消息?

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

根据消息传递代理的不同,有一些选项可以使使用者成为独占的,这样只有该使用者才能从队列中读取消息,而其他使用者则坐在那里等待独占的使用者离开,这使他们可以进行某种备份

其他选项包括使用ApacheCamel之类的工具将给定消息路由到多个队列,或者使用AcitveMQ虚拟主题将消息发送到主题,然后将该消息排入特定的使用者队列


解决方案取决于您正在使用的代理和您试图解决的问题,您在问题中没有真正阐明这些问题。

实际上,我只是好奇,如果队列消息将仅由一个使用者使用,那么为什么一个队列可以由多个使用者访问?它将给我们带来什么好处?谢谢你的回答。因为它是一个队列,而这正是它们被定义要做的,如果你仍然感到困惑,请阅读JMS规范。