RabbitMQ(或者spring云流)可以独占消费消息吗?
Can RabbitMQ (or spring cloud stream) consume messages exclusively?
我有一个 rabbitmq 队列和两个 spring 云 spring 消费者。
我希望每个消费者按顺序处理消息。
我以为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云流独占消费消息?
RabbitMQ (AMQP) 不支持;每个消费者收到 prefetch
条消息。
它确实支持独占消费者,但这意味着消费者 1 将获得所有消息,而消费者 2 只有在消费者 1 死亡时才能获得消息。
但是,Spring Cloud Stream 当前不提供 属性 来设置该选项。
您将不得不以不同的方式为您的队列建模。例如。通过拥有一个只有一个消费者协调器的 "incoming" 队列。该消费者会将消息中继到 "work" 队列,其中消费者 1+2 正在等待并以循环方式接收工作。
然后他们会向第三个队列上的协调器发出完成信号,这将导致它恢复将单个消息中继到工作队列。
我有一个 rabbitmq 队列和两个 spring 云 spring 消费者。 我希望每个消费者按顺序处理消息。
我以为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云流独占消费消息?
RabbitMQ (AMQP) 不支持;每个消费者收到 prefetch
条消息。
它确实支持独占消费者,但这意味着消费者 1 将获得所有消息,而消费者 2 只有在消费者 1 死亡时才能获得消息。
但是,Spring Cloud Stream 当前不提供 属性 来设置该选项。
您将不得不以不同的方式为您的队列建模。例如。通过拥有一个只有一个消费者协调器的 "incoming" 队列。该消费者会将消息中继到 "work" 队列,其中消费者 1+2 正在等待并以循环方式接收工作。
然后他们会向第三个队列上的协调器发出完成信号,这将导致它恢复将单个消息中继到工作队列。