rabbitmq - RabbitMQ 锁消息组
问题描述
我正在向 RabbitMQ 或其他消息代理用户专业人员寻求帮助。我对消息代理系统比较陌生,所以如果我没有使用正确的措辞,请多多包涵。
我们有一个用户注册的 SAAS 平台,我们开始为他们自动化一些流程。其中一些过程需要为每个用户一个接一个地处理。这是我们想使用消息代理的地方。
该系统如下图所示:
我们着色的地方表示不同的用户。所以如果 C-1 开始处理来自黄色用户的第一个任务,C-2 必须从蓝色用户那里接过任务。
建议一:
当消费者开始处理来自特定组的任务时,是否可以“锁定”一组任务?在这种情况下,C-2 应该执行 blue-user 任务。在这里缩放消费者的数量相当简单。
建议二:
在这里,每个用户都有自己的队列,并附有一个消费者。我们面临的挑战是,我们如何在创建新队列时自动启动消费者,如果队列有一段时间不使用,可能会停止消费者?
提前致谢
解决方案
如果您将路由键设为用户 ID,那么您可以使用一致的散列交换按该键对消息进行分片。将几个队列绑定到该交换,任何给定用户 ID 的消息将仅存在于单个队列中。然后让 c1 订阅 queue1,c2 订阅 queue2 等。您还可以在每个队列上启用 Single-Active-Consumer (SAC),以确保一次只有一个消费者连接到每个队列。
如果您需要 SAC,则需要 3.8 及更高版本。
推荐阅读
- arrays - 过滤数组直到值匹配
- powershell - Powershell 使用 1 行而不是 3 行
- javascript - 在 WebView 中启用 JS
- python - Python ctypes结构:可以在不定义类/内联的情况下制作吗?
- reactjs - 状态更新不会在 ReactJS 中重新渲染组件
- wordpress - contactform7 如何附加任何类型的文件
- qgis - 用行号和列号索引网格?
- c - 什么应该 printf("%.15e", 1e23); 打印?
- reactjs - Material UI makeStyles 在其他类下时覆盖其中的类属性
- google-cloud-platform - Cloud Run 警告日志:容器调用 exit(3)