RabbitMQ(或Spring云流)可以独占消息吗?

时间:2017-07-13 05:23:48

标签: java rabbitmq amqp spring-cloud-stream

我有一个rabbitmq队列和两个春天的云泉消费者。 我希望每个消费者按顺序处理消息。

我认为当consumer1发送ack时,consumer2会收到第二条消息, 所以我期望message1,message2按顺序在每个消费者中处理。

-------------------- time pass ------------------------>

consumer1:   message1             message3
consumer2:              message2            message4

但事实并非如此。 consumer1,consumer2同时接收message1,message2和进程。

-------------------- time pass ------------------------>

consumer1:   message1  message3
consumer2:   message2  message4

Spring云流是否有办法专门使用消息?

2 个答案:

答案 0 :(得分:2)

RabbitMQ(AMQP)不支持;每个消费者都会收到prefetch条消息。

它支持独家消费者,但它意味着consumer1将获得所有消息,而consumer2只会在消费者1死亡时获得消息。

但是,Spring Cloud Stream目前不提供设置该选项的属性。

答案 1 :(得分:1)

您必须以不同的方式为队列建模。例如。通过"传入"队列中只有一个消费者协调员。这个消费者会将消息转发给" work"消费者1 + 2都在等待并以循环方式接收工作的队列。

然后,他们会在第三个队列上向协调器发出完成信号,这将导致它恢复将单个消息中继到工作队列。