我有多个生产者,它们产生处理组件的请求。这些组件很多,处理每个组件都需要花费大量时间。
问题在于,每个组件一次运行最多只能有一个处理任务。换句话说,在一个组件上不能同时执行两个任务,但是可以(并且应该)并行处理不同的组件。
我的想法不是为每个组件创建单独的队列,并让所有工作人员都订阅所有这些队列。消息代理将从任何队列中仅发出一条消息,并等待ACK。这样,我将确保可以同时处理多个组件,但是对于给定的组件,只会执行一个处理任务。
我的问题是:可能吗?如果是的话,这是个好方法吗?也许对于这个问题还有另一种解决方案?
这是我的方法示意图:
Cost
编辑-只需一个队列即可解决吗?在不考虑组件数量(基本上不受限制)之前,每个组件具有单独队列的想法听起来不错。
答案 0 :(得分:0)
可以(每个组件最好使用IMO)对每个组件使用队列。我认为这不适用于一个队列(您编辑的问题)。
细节决定成败,具体取决于您使用的排队系统。
答案 1 :(得分:0)
与其将组件视为队列,不如将它们视为主题。当工作人员想要侦听特定的组件时,它可以创建一个排他队列,该排他队列基于主题(将是组件名称或其他唯一ID)绑定到您的主题交换。
您必须注意,发布到没有使用者的主题的消息将被丢弃,因此请通过mandatory
标志或使用Alternate Exchange
RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。