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

标签 rabbitmq message-queue messaging amqp

我有多个生成器生成处理组件的请求。这些组件很多,处理每个组件都需要花费大量时间。

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

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

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

这是我的方法图:

+----------+              +-------------+
| producer | -----------> |  Exchange   |
+----------+              +-------------+
                           |     |     |
                           v     v     v
                          +-+   +-+   +-+
                          |-|   |-|   |-|
                          |-|   |-|   |-|  Queues per component
                          |-|   |-|   |-|
                          +-+   +-+   +-+
                           |     |     |
                           +-----+-----+
                          /             \
                         v               v
                  +------------+   +------------+
                  | Consumer 1 |   | Consumer 2 |
                  +------------+   +------------+

编辑 — 只用一个队列就可以解决吗?在考虑组件数量(基本上是无限的)之前,每个组件使用单独队列的想法听起来不错。

最佳答案

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

细节决定成败,这取决于您使用的排队系统。

关于rabbitmq - 如何一次只处理一条给定类型的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097300/

相关文章:

php - 在中等流量网站上实现消息队列的最佳方式是什么

c++ - 如何清除 POSIX 消息队列?

ios - 是否可以让我的 iOS 应用程序的组件一直运行?

javascript - 无论如何要防止rabbitmq死信队列丢弃属性?

python - 这是从鼠兔中提取队列的最简单方法

java - RabbitMQ - 安全/身份验证

c# - RabbitMQ + C# + SSL

c++ - 寻找 Boost message_queue 和序列化用法的简单示例

jms - 使用和不使用 Spring JMS 的 AUTO_ACKNOWLEDGEMENT 模式之间的区别

c++ - 如何通过 WH_KEYBOARD_LL Hook 程序发送输入消息