我有一个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云流是否有办法专门使用消息?
答案 0 :(得分:2)
RabbitMQ(AMQP)不支持;每个消费者都会收到prefetch
条消息。
它支持独家消费者,但它意味着consumer1将获得所有消息,而consumer2只会在消费者1死亡时获得消息。
但是,Spring Cloud Stream目前不提供设置该选项的属性。
答案 1 :(得分:1)
您必须以不同的方式为队列建模。例如。通过"传入"队列中只有一个消费者协调员。这个消费者会将消息转发给" work"消费者1 + 2都在等待并以循环方式接收工作的队列。
然后,他们会在第三个队列上向协调器发出完成信号,这将导致它恢复将单个消息中继到工作队列。