我想在RabbitMQ中对队列进行此约束:
队列中的下一条消息无法在先前的消息(正在处理的消息)被激活之前出列。
通过这个,我将实现跨多个队列的事件和并行处理的有序处理。我如何为此配置RabbitMQ?
编辑(澄清):将有许多消费者都试图从所有队列中获得工作,因为他们无法从正在处理的事件的队列中获得工作,而不是订购 - 订购处理得以维持。
答案 0 :(得分:3)
队列中的下一条消息在上一条消息(正在处理的消息)被激活之前无法出列。
您可以通过consumer prefetch limit为单个消费者执行此操作。
通过这个,我将实现跨多个队列的事件和并行处理的有序处理。
不幸的是,这不会产生你想要的效果。
您可以为个人消费者设置。消费者在获得下一个消息之前会等待消息被确认。
但是,这适用于个人消费者,而不是队列。
如果您有2个消费者,则每个消费者将并行处理消息。如果你有10个消费者,将同时处理10条消息。
按顺序处理每条消息的唯一方法是让一个消费者预取1。