Rabbitmq 如何一次只处理一条给定类型的消息?

Rabbitmq 如何一次只处理一条给定类型的消息?,rabbitmq,message-queue,messaging,amqp,Rabbitmq,Message Queue,Messaging,Amqp,我有多个生产商生产加工组件的请求。这些组件有很多,每一个组件的处理都需要大量的时间 问题是每个组件一次最多只能运行一个处理任务。换句话说,没有两个任务可以在一个组件上同时运行,但是不同的组件可以(也应该)并行处理 我的想法不是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。MessageBroker只从任何队列发出一条消息并等待ACK。通过这种方式,我将确保可以同时处理多个组件,但对于给定的组件,只能执行一个处理任务 我的问题是:可能吗?如果是的话——这是一个好方法吗?也许还有别的解

我有多个生产商生产加工组件的请求。这些组件有很多,每一个组件的处理都需要大量的时间

问题是每个组件一次最多只能运行一个处理任务。换句话说,没有两个任务可以在一个组件上同时运行,但是不同的组件可以(也应该)并行处理

我的想法不是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。MessageBroker只从任何队列发出一条消息并等待ACK。通过这种方式,我将确保可以同时处理多个组件,但对于给定的组件,只能执行一个处理任务

我的问题是:可能吗?如果是的话——这是一个好方法吗?也许还有别的解决办法

以下是我的方法示意图:

+----------+              +-------------+
| producer | -----------> |  Exchange   |
+----------+              +-------------+
                           |     |     |
                           v     v     v
                          +-+   +-+   +-+
                          |-|   |-|   |-|
                          |-|   |-|   |-|  Queues per component
                          |-|   |-|   |-|
                          +-+   +-+   +-+
                           |     |     |
                           +-----+-----+
                          /             \
                         v               v
                  +------------+   +------------+
                  | Consumer 1 |   | Consumer 2 |
                  +------------+   +------------+
编辑-只需一个队列就可以解决吗?在考虑组件的数量(基本上没有边界)之前,每个组件使用单独队列的想法听起来不错。

每个组件使用队列是可能的(也是一个好主意,IMO)。我认为它不适合一个队列(您编辑的问题)


问题在于细节,这取决于您使用的排队系统。

不要将组件视为队列,而是将它们视为主题。当工作程序想要侦听特定组件时,它可以创建一个独占队列,该队列基于主题(即组件名称或其他唯一id)绑定到您的主题交换

您必须注意,发布到没有使用者的主题的消息将被删除,因此请通过
强制标记或使用


RabbitMQ团队监视并仅有时回答有关StackOverflow的问题