我有多个生成器生成处理组件的请求。这些组件很多,处理每个组件都需要花费大量时间。
问题是每个组件一次最多只能有一个处理任务。换句话说,没有两个任务可以同时对一个组件进行操作,但是不同的组件可以(并且应该)并行处理。
我的想法是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。消息代理只会从任何队列发出一条消息并等待 ACK。通过这种方式,我将确保可以同时处理多个组件,但对于给定的组件只会执行一个处理任务。
我的问题是:这可能吗?如果是的话——这是一个好方法吗?也许这个问题有另一种解决方案?
这是我的方法图:
+----------+ +-------------+
| producer | -----------> | Exchange |
+----------+ +-------------+
| | |
v v v
+-+ +-+ +-+
|-| |-| |-|
|-| |-| |-| Queues per component
|-| |-| |-|
+-+ +-+ +-+
| | |
+-----+-----+
/ \
v v
+------------+ +------------+
| Consumer 1 | | Consumer 2 |
+------------+ +------------+
编辑 — 只用一个队列就可以解决吗?在考虑组件数量(基本上是无限的)之前,每个组件使用单独队列的想法听起来不错。
最佳答案
为每个组件使用一个队列是可能的(这是一个好主意,IMO)。我认为它不适用于一个队列(您编辑的问题)。
细节决定成败,这取决于您使用的排队系统。
关于rabbitmq - 如何一次只处理一条给定类型的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097300/