Search code examples
javarabbitmqamqpspring-cloud-stream

Can RabbitMQ (or spring cloud stream) consume messages exclusively?


I have a rabbitmq queue and two spring cloud spring consumers. I want that each consumers process messages in order.

I thought that when consumer1 send ack, consumer2 receive second message, so I expected message1, message2 is processed in order in each consumers.

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

consumer1:   message1             message3
consumer2:              message2            message4

But it wasn't. consumer1, consumer2 receive message1, message2, and process simultaneously.

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

consumer1:   message1  message3
consumer2:   message2  message4

Is there a way for spring cloud stream to consume messages exclusively?


Solution

  • RabbitMQ (AMQP) doesn't support that; each consumer gets prefetch messages.

    It does support exclusive consumers, but it means consumer1 would get all the messages and consumer2 would only get messages if consumer1 dies.

    However, Spring Cloud Stream doesn't currently provide a property to set that option.