具有许多小队列的 RabbitMQ 强制执行顺序执行(模式或反模式)?

RabbitMQ with many small queues to enforce sequential execution (pattern or anti-pattern)?

假设(但更简单)的场景:

我目前正在研究利用 RabbitMQ 进行类似设置的想法:

这些队列将是短暂的,所以我最终不会有数百万个队列,但它无论如何都应该扩展(如果项目大幅增长,我们可以说降低一位数)。问题是就 RabbitMQ(或类似)系统而言,这是否是绝对反模式,或者是否有更好的解决方案来确保顺序执行。

谢谢!

在我看来,创建临时队列可能不是一个好主意,因为创建和删除队列会产生相当大的开销。重点应该放在消息消费上。我可以想到以下解决方案:

  • 您可以通过构建发布策略来限制队列的数量,例如所有订单 ID 可被 2 整除的订单进入 queue-1,可被 3 整除的订单进入 queue-2 等等。这将为您提供并行吞吐量以及有限数量的队列,但是您必须处理一些额外的发布者逻辑

  • 相同的逻辑可以通过使用单个发布-订阅样式队列转移到消费者端,然后消费者有责任过滤不需要的 orderIds

  • 如果你乐于探索其他技术,你也可以看看 Kafka,在那里你可以使用 orderId 作为 partitionKey 并使用多个分区来获得并行吞吐量。