我有多个生成器产生处理组件的请求。这些组件很多,每个组件的处理都需要相当长的时间。
问题在于每个组件最多只能运行一个处理任务。换句话说,在一个组件上不可能同时进行两个任务,但应该可以(并且应该)并行处理不同的组件。
我的想法是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。消息代理只会从任何队列中发出一条消息并等待确认。这样,我就可以确保多个组件可以同时处理,但仅针对给定组件的一个处理任务会发生。
我的问题是:这种方法可行吗?如果是,这是一个好的方法吗?也许还有其他解决该问题的方法?
以下是我的方法图解:
问题在于每个组件最多只能运行一个处理任务。换句话说,在一个组件上不可能同时进行两个任务,但应该可以(并且应该)并行处理不同的组件。
我的想法是为每个组件创建单独的队列,并让所有工作人员订阅所有这些队列。消息代理只会从任何队列中发出一条消息并等待确认。这样,我就可以确保多个组件可以同时处理,但仅针对给定组件的一个处理任务会发生。
我的问题是:这种方法可行吗?如果是,这是一个好的方法吗?也许还有其他解决该问题的方法?
以下是我的方法图解:
+----------+ +-------------+
| producer | -----------> | Exchange |
+----------+ +-------------+
| | |
v v v
+-+ +-+ +-+
|-| |-| |-|
|-| |-| |-| Queues per component
|-| |-| |-|
+-+ +-+ +-+
| | |
+-----+-----+
/ \
v v
+------------+ +------------+
| Consumer 1 | | Consumer 2 |
+------------+ +------------+
编辑 — 只用一个队列就可以解决这个问题吗?按组件分开使用不同的队列听起来很不错,但是考虑到组件数量(基本上是无限的),这个想法就不太可行了。