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

时间:2018-06-29 08:19:16

标签: rabbitmq message-queue messaging amqp

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

问题在于,每个组件一次运行最多只能有一个处理任务。换句话说,在一个组件上不能同时执行两个任务,但是可以(并且应该)并行处理不同的组件。

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

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

这是我的方法示意图:

Cost

编辑-只需一个队列即可解决吗?在不考虑组件数量(基本上不受限制)之前,每个组件具有单独队列的想法听起来不错。

2 个答案:

答案 0 :(得分:0)

可以(每个组件最好使用IMO)对每个组件使用队列。我认为这不适用于一个队列(您编辑的问题)。

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

答案 1 :(得分:0)

与其将组件视为队列,不如将它们视为主题。当工作人员想要侦听特定的组件时,它可以创建一个排他队列,该排他队列基于主题(将是组件名称或其他唯一ID)绑定到您的主题交换。

您必须注意,发布到没有使用者的主题的消息将被丢弃,因此请通过mandatory标志或使用Alternate Exchange

考虑

RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。