(从Github Issue领取)
我们使用RabbitMQ' consistent hash exchange这对于将交换路由密钥从交换分片到多个队列非常有用。
我们使用队列向工人提供工作。理想情况下,我们希望动态扩展这些工作人员,但这会带来问题。
要向上扩展,您需要添加新队列和绑定。在它自己身上这不是一个大问题 - 除了这个事实,分片键现在可能开始进入不同的队列。
所以Worker A可能一直在管理Thing1,但是现在当我们添加新队列时,Worker B最终可能会收到Thing1的消息。在工人B开始收到Thing1消息之前,工人A完成了所有的Thing1处理,这一点非常重要。
它们是否可以解决此问题的任何方法或插件?
答案 0 :(得分:0)
在这种情况下,我会使用一个调度消息而不是散列交换的worker。
producer1 ... producern => topic-exchange => queue =>调度员工人=> queue1 ... queuen => worker1 ... workern
这样,调度员工作人员可以跟踪所有消息。为此,您可以简单地检查队列中剩余的消息数量,或者您可以检查工作人员确认消息,或者您可以使用rabbitmqs RPC功能。