什么时候应该使用单个队列,什么时候使用多个队列?

When should I use a single queue and when multiple ones?

我想知道,在 RabbitMQ 中何时创建单个队列以及何时创建多个队列是否有规则?还是由生产者将消息发送到单个队列或多个队列,从技术上讲没有区别?它是否应该取决于数据库的架构,也就是说,单个 table 是否应该对应于单个队列?

single queue in RabbitMQ and when multiple ones?

单个队列是一个非常糟糕的主意。最终您会希望不同类型的消息流经 rabbitmq。如果你只有一个队列,当 RabbitMQ 可以通过路由为你做这件事时,你最终会重现如何决定哪个代码应该处理消息的逻辑。

一般来说,每一种"work"要做的事情,用一条消息来表示,应该是它自己的队列。

有时特定的消息使用者也需要它自己的队列,即使相同类型的消息流向其他队列也是如此。

Or is it up to a producer whether or not send the messages to a single queue or multiple ones

生产者不决定将消息传递到哪个队列。生产者只知道通过哪个交易所发布。消息消费者应该是决定消息传递到哪里的人。消息使用者应负责设置交换器和目标队列之间的路由。

这也有例外,就像软件开发中的每个 "good idea" 一样,但总的来说我认为这是真的

Should it depend on the schema of the db

您的 RabbitMQ 配置与您的数据库零相关。不要费心尝试在两者之间进行映射。充其量会很痛苦。

而是看行为。

这条消息需要触发什么类型的行为?它的具体行为是什么,应该使用哪个交换/路由密钥发布?

这些更好的问题将引导您获得更好的 RabbitMQ 布局,重点关注相关消息组的交换、专用于特定类型消息消费者或特定消费者的队列,以及提供将消息从交换器移动到正确队列的逻辑。

...

我建议阅读一些关于 RabbitMQ 的书籍,让自己朝着正确的方向前进,了解应该如何使用 RabbitMQ 的基础知识,然后进入良好的使用模式和拓扑设计:

  • RabbitMQ In Action - 从零开始,它是什么,为什么要使用它,它是如何工作的,等等。推荐给所有查看 RMQ 的人
  • RabbitMQ Layout - 了解 RabbitMQ 如何适应各种场景,通过开发人员解决问题的故事讲述 - 这是 RMQ 拓扑设计(交换、队列和绑定)"why-to"
  • RabbitMQ Patterns - 了解消息类型、路由和消息系统中的常见使用模式,如应用于 RabbitMQ - 这是使用 RMQ[=42= 进行应用程序和拓扑设计的核心模式 "how-to" ]