Rabbitmq 如何一次只处理一条给定类型的消息?
我有多个生产商生产加工组件的请求。这些组件有很多,每一个组件的处理都需要大量的时间 问题是每个组件一次最多只能运行一个处理任务。换句话说,没有两个任务可以在一个组件上同时运行,但是不同的组件可以(也应该)并行处理 我的想法不是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。MessageBroker只从任何队列发出一条消息并等待ACK。通过这种方式,我将确保可以同时处理多个组件,但对于给定的组件,只能执行一个处理任务 我的问题是:可能吗?如果是的话——这是一个好方法吗?也许还有别的解决办法 以下是我的方法示意图:Rabbitmq 如何一次只处理一条给定类型的消息?,rabbitmq,message-queue,messaging,amqp,Rabbitmq,Message Queue,Messaging,Amqp,我有多个生产商生产加工组件的请求。这些组件有很多,每一个组件的处理都需要大量的时间 问题是每个组件一次最多只能运行一个处理任务。换句话说,没有两个任务可以在一个组件上同时运行,但是不同的组件可以(也应该)并行处理 我的想法不是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。MessageBroker只从任何队列发出一条消息并等待ACK。通过这种方式,我将确保可以同时处理多个组件,但对于给定的组件,只能执行一个处理任务 我的问题是:可能吗?如果是的话——这是一个好方法吗?也许还有别的解
+----------+ +-------------+
| producer | -----------> | Exchange |
+----------+ +-------------+
| | |
v v v
+-+ +-+ +-+
|-| |-| |-|
|-| |-| |-| Queues per component
|-| |-| |-|
+-+ +-+ +-+
| | |
+-----+-----+
/ \
v v
+------------+ +------------+
| Consumer 1 | | Consumer 2 |
+------------+ +------------+
编辑-只需一个队列就可以解决吗?在考虑组件的数量(基本上没有边界)之前,每个组件使用单独队列的想法听起来不错。每个组件使用队列是可能的(也是一个好主意,IMO)。我认为它不适合一个队列(您编辑的问题)
问题在于细节,这取决于您使用的排队系统。不要将组件视为队列,而是将它们视为主题。当工作程序想要侦听特定组件时,它可以创建一个独占队列,该队列基于主题(即组件名称或其他唯一id)绑定到您的主题交换 您必须注意,发布到没有使用者的主题的消息将被删除,因此请通过
强制标记或使用
RabbitMQ团队监视并仅有时回答有关StackOverflow的问题