RabbitMQ:下一条消息只能在前一条消息被确认后才能出队

RabbitMQ: next message can be dequeued only after previous was acked

我想在 RabbitMQ 的队列上有这个约束:

在确认上一条消息(正在处理的消息)之前,队列中的下一条消息不能出队。

通过这个我将实现事件的有序处理和跨多个队列的并行处理。 I/can 我如何为此配置 RabbitMQ?

编辑(澄清):将有许多消费者都试图从所有队列中获取工作,并且由于他们无法从正在处理未确认事件的队列中获取工作 - 有序处理是维护。

Next message in the queue can't be dequeued before previous message (the one being processed) is acked.

您可以通过 consumer prefetch limit 为单个消费者执行此操作。

Through this I will achieve ordered processing of events and parallel processing across multiple queues.

很遗憾,这不会达到您想要的效果。

可以为个人消费者设置。该消费者将等待一条消息被确认,然后再获取下一条消息。

但是,这适用于单个消费者,不适用于队列。

如果你有 2 个消费者,他们每个人都会并行处理一条消息。如果您有 10 个消费者,将并行处理 10 条消息。

按顺序处理每条消息的唯一方法是让一个消费者的预取值为 1。