首页 > 解决方案 > RabbitMQ 锁消息组

问题描述

我正在向 RabbitMQ 或其他消息代理用户专业人员寻求帮助。我对消息代理系统比较陌生,所以如果我没有使用正确的措辞,请多多包涵。

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

该系统如下图所示:

在此处输入图像描述

我们着色的地方表示不同的用户。所以如果 C-1 开始处理来自黄色用户的第一个任务,C-2 必须从蓝色用户那里接过任务。

建议一:

在此处输入图像描述

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

建议二:

在此处输入图像描述

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

提前致谢

标签: rabbitmqqueue

解决方案


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

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


推荐阅读