RabbitMQ锁消息组

RabbitMQ锁消息组,rabbitmq,queue,Rabbitmq,Queue,我正在寻求RabbitMQ或其他MessageBroker用户专业人士的帮助。我对MessageBroker系统比较陌生,所以如果我没有使用正确的措辞,请容忍我 我们有一个用户注册的SAAS平台,我们开始为他们自动化一些流程。其中一些过程需要为每个用户一个一个地处理。这就是我们希望使用MessageBroker的地方 该系统如图所示: 我们使用的颜色表示不同的用户。因此,如果C-1开始处理来自黄色用户的第一个任务,C-2必须从蓝色用户接收该任务 建议1: 当使用者开始处理特定组中的任务时,是

我正在寻求RabbitMQ或其他MessageBroker用户专业人士的帮助。我对MessageBroker系统比较陌生,所以如果我没有使用正确的措辞,请容忍我

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

该系统如图所示:

我们使用的颜色表示不同的用户。因此,如果C-1开始处理来自黄色用户的第一个任务,C-2必须从蓝色用户接收该任务

建议1:

当使用者开始处理特定组中的任务时,是否可以“锁定”一组任务?在这种情况下,C-2应该执行蓝色用户任务。在这里,扩大消费者的数量相当简单

建议2:

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


提前感谢

为了使用rabbitmq,您应该使用建议2,没有办法通过某个键“锁定”队列中的消息。最接近的是优先级,它不适合您的模型


使用建议2方法要求您在向队列发送消息之前声明队列(或者以另一种方式控制声明,因为RabbitMQ中没有自动创建队列)并使用。你也应该考虑一个替代方案,其中队列创建是由消费者控制的,而不是发布者。

如果你把路由关键字变成用户ID,那么你可以使用一致的哈希交换来用这个密钥来切碎消息。将几个队列绑定到该交换,任何给定用户id的消息将只存在于单个队列中。然后让c1订阅队列1,c2订阅队列2等。您还可以在每个队列上启用单个活动使用者(SAC),以确保一次只有一个使用者连接到每个队列


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

谢谢您的输入。当消费者断开连接时,首先考虑队列ttl的理解是否正确?我对建议2的挑战是在新队列上启动消费者的整个结构部分,如何确保它们不会永远运行,如果调用了ttl,则启动一个新消费者,如果服务器出现故障,则为所有人启动新消费者。你知道这类主题有什么好的阅读练习吗?@MadsMønster是的,没错。我认为,如果您想使用RMQ实现这一点,您需要将逻辑从代理转移到模型中的消费者。恐怕我只能向你指出卡夫卡,据我所知,它可能比RMQ更适合你的需要(但请恕我直言,我以前从未使用过卡夫卡)@MadsMønster你找到实现它的方法了吗?@melih我还没有现成的解决方案,但我当前的解决方案是使用rabbitmq_事件_交换,并在新队列上有一个从consumer开始的consumer,并检查队列是否为空。如果队列在一段时间内为空,它将删除queue@MadsMønster如何启动新队列的消费者?