【发布时间】:2018-12-08 09:17:18
【问题描述】:
我有多个生产者产生处理组件的请求。这些组件很多,处理每个组件都需要大量时间。
问题是每个组件一次最多只能有一个处理任务。换句话说,没有两个任务可以同时在一个组件上运行,但不同的组件可以(并且应该)并行处理。
我的想法是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。消息代理将只从任何队列发出一条消息并等待 ACK。这样我就可以确保可以同时处理多个组件,但对于给定组件只会执行一个处理任务。
我的问题是:这可能吗?如果是的话——这是一个好方法吗?也许这个问题还有其他解决方案?
这是我的方法的示意图:
+----------+ +-------------+
| producer | -----------> | Exchange |
+----------+ +-------------+
| | |
v v v
+-+ +-+ +-+
|-| |-| |-|
|-| |-| |-| Queues per component
|-| |-| |-|
+-+ +-+ +-+
| | |
+-----+-----+
/ \
v v
+------------+ +------------+
| Consumer 1 | | Consumer 2 |
+------------+ +------------+
编辑 — 可以只用一个队列解决吗?在考虑组件数量(基本上是无限的)之前,每个组件有单独队列的想法听起来不错。
【问题讨论】:
标签: rabbitmq message-queue messaging amqp