RabbitMQ锁定消息组

RabbitMQ lock message group

我正在寻求 RabbitMQ 或其他消息代理用户专家的帮助。我是消息代理系统的新手,所以如果我使用的措辞不正确,请多多包涵。

我们有一个用户注册的 SAAS 平台,我们开始为他们自动化一些流程。其中一些流程需要为每个用户处理 on-by-one。这是我们要使用消息代理的地方。

系统说明如下:

我们用颜色表示不同的用户。所以如果C-1开始处理来自yellow-user的第一个任务,C-2必须从blue-user开始处理第一个任务。

建议 1:

是否可以在消费者开始处理来自特定组的任务时“锁定”一组任务?在这种情况下,C-2 应该接手 blue-user 任务。在这里扩展消费者的数量会相当简单。

建议 2:

这里每个用户都有自己的队列,并附有一个消费者。我们面临的挑战是,我们如何在创建新队列时自动启动消费者,并在一段时间不使用队列时可能停止消费者?

提前致谢

为了使用 rabbitmq,您应该使用建议 2,无法通过某个键 'lock' 队列中的消息。最接近的是优先级,它不适合你的模型。

使用建议 2 方法要求您在向队列发送消息之前声明队列(或以另一种方式控制声明,因为在 RabbitMQ 中没有自动创建队列)并使用 queue TTL. You should also consider exclusive queues作为替代方案,队列创建由消费者而不是发布者控制。

如果您将路由键设为用户 ID,则可以使用一致的哈希交换通过该键对消息进行分片。将几个队列绑定到该交换器,任何给定用户 ID 的消息将仅存在于一个队列中。然后让c1订阅queue1,c2订阅queue2等。您还可以在每个队列上启用Single-Active-Consumer(SAC),以确保每次只有一个消费者连接到每个队列。

如果您需要 SAC,则需要 3.8 及更高版本。