RabbitMQ:扩展具有一致哈希交换的队列

And*_*ith 5 rabbitmq rabbitmq-exchange

(从Github发行

我们使用RabbitMQ的一致性哈希交换,这有助于将密钥从交换分派到多个队列。

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

为了扩大规模,您需要添加新的队列和绑定。就其本身而言,这并不是什么大不了的事情-除了分片密钥现在可能开始进入另一个队列这一事实之外。

因此,工作程序A可能一直在管理Thing1,但是现在,当我们添加新队列时,工作程序B可能最终会收到Thing1的消息。在工作者B开始获取Thing1消息之前,工作者A必须完成所有Thing1处理。

他们是否有任何方法或插件可以缓解此问题?

slo*_*k2k 0

在这种情况下,我将使用一个工人来调度消息而不是哈希交换。

生产者1 ...生产者=>主题交换=>队列=>调度程序工作者=>队列1 ...队列=>工作者1 ...工作者

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