RabbitMQ:使用一致的哈希交换来扩展队列

时间:2016-08-10 12:05:37

标签: rabbitmq rabbitmq-exchange

(从Github Issue领取)

我们使用RabbitMQ' consistent hash exchange这对于将交换路由密钥从交换分片到多个队列非常有用。

我们使用队列向工人提供工作。理想情况下,我们希望动态扩展这些工作人员,但这会带来问题。

要向上扩展,您需要添加新队列和绑定。在它自己身上这不是一个大问题 - 除了这个事实,分片键现在可能开始进入不同的队列。

所以Worker A可能一直在管理Thing1,但是现在当我们添加新队列时,Worker B最终可能会收到Thing1的消息。在工人B开始收到Thing1消息之前,工人A完成了所有的Thing1处理,这一点非常重要。

它们是否可以解决此问题的任何方法或插件?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我会使用一个调度消息而不是散列交换的worker。

producer1 ... producern => topic-exchange => queue =>调度员工人=> queue1 ... queuen => worker1 ... workern

这样,调度员工作人员可以跟踪所有消息。为此,您可以简单地检查队列中剩余的消息数量,或者您可以检查工作人员确认消息,或者您可以使用rabbitmqs RPC功能。