AMQP/RabbitMQ - 如何避免竞争条件

AMQP/RabbitMQ - How to avoid race conditions

我有以下架构: Architecture

输入源正在发送待处理的命令。这些命令由代理转发并由两个消费者之一接收。

我需要以下行为:

是否可以通过 AMQP/RabbitMQ 强制执行此行为?

您可以为每个队列使用一个使用者来覆盖您的场景。 每个队列可以按顺序处理消息。

另一种方法是只使用一个队列并使用 envelope.getExchange() 来了解来源,或者 tag 您的消息使用 AMQP.BasicProperties properties

这样,比如可以多线程消费消息,每个分配一个线程tag

为了保证顺序,您可能需要聚合消息。您可以在发布到队列之前将来自一个源的命令批处理成一条消息,因此进入队列的消息可以包含一个或多个将由消费者执行的命令。