RabbitMQ 并发监听器监听同一个队列的顺序
Order in which RabbitMQ concurrent listeners listen to the same queue
我有一个 @RabbitListener 监听队列容器。
@RabbitListener(id = CONTAINER_ID, concurrency = "100")
public void instrumentListener(String payload) {
// do some action
}
我的问题是:
- 并发监听器可以监听同一个队列吗?
- 如果是这样,并发侦听器是否尊重被推送到他们正在侦听的“该”队列中的对象的顺序。
例如,如果有一个名为 order_queue 的队列,其中有许多订单被推送到其中,并且有两个并发侦听器正在侦听 order_queue(如果可能的话),并且一个侦听器得到在它收到的订单对象上暂停几秒钟(现在订单不在队列中并且在这个侦听器主体中),另一个侦听器是否等待被暂停的侦听器。
order_queue elements initially: [5,4,3,2,1] --> head of queue
queue concurrent listeners in process processed
[...,5,4] ______ Listener1 (2) 1sec (1)
|______ Listener2 (3) 10sec
1 秒后,Listener1 是否等待 9 秒让 Listener2 以“3”完成其过程,或者 Listener1 采取行动以获得“4”并且不遵守顺序?
换句话说,@RabbitListener 函数体中的所有内容是否都必须在队列中的下一个对象具有释放权限之前完成(确认发送)?
没有;并发消费者是独立的;代理将向每个消费者发送 preFetch
消息,他们以 运行 的任意速率独立处理这些消息。
我有一个 @RabbitListener 监听队列容器。
@RabbitListener(id = CONTAINER_ID, concurrency = "100")
public void instrumentListener(String payload) {
// do some action
}
我的问题是:
- 并发监听器可以监听同一个队列吗?
- 如果是这样,并发侦听器是否尊重被推送到他们正在侦听的“该”队列中的对象的顺序。
例如,如果有一个名为 order_queue 的队列,其中有许多订单被推送到其中,并且有两个并发侦听器正在侦听 order_queue(如果可能的话),并且一个侦听器得到在它收到的订单对象上暂停几秒钟(现在订单不在队列中并且在这个侦听器主体中),另一个侦听器是否等待被暂停的侦听器。
order_queue elements initially: [5,4,3,2,1] --> head of queue
queue concurrent listeners in process processed
[...,5,4] ______ Listener1 (2) 1sec (1)
|______ Listener2 (3) 10sec
1 秒后,Listener1 是否等待 9 秒让 Listener2 以“3”完成其过程,或者 Listener1 采取行动以获得“4”并且不遵守顺序?
换句话说,@RabbitListener 函数体中的所有内容是否都必须在队列中的下一个对象具有释放权限之前完成(确认发送)?
没有;并发消费者是独立的;代理将向每个消费者发送 preFetch
消息,他们以 运行 的任意速率独立处理这些消息。