【问题标题】:When should I use a single queue and when multiple ones?什么时候应该使用一个队列,什么时候应该使用多个?
【发布时间】:2016-05-09 16:10:51
【问题描述】:

我想知道,是否有关于何时在 RabbitMQ 中创建单个队列以及何时创建多个队列的规则?还是由生产者决定是将消息发送到单个队列还是多个队列,并且在技术上没有区别?是不是应该依赖于db的schema,也就是单表是否应该对应单队列?

【问题讨论】:

    标签: rabbitmq activemq stomp


    【解决方案1】:

    RabbitMQ 中的单个队列和多个队列?

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

    一般来说,每一种要完成的“工作”,由一条消息表示,都应该是它自己的队列。

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

    还是由生产者决定是将消息发送到单个队列还是多个队列

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

    这也有例外,就像软件开发中的每个“好主意”一样,但总的来说我认为这是真的

    是否应该依赖于数据库的架构

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

    相反,看行为。

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

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

    ...

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

    • RabbitMQ In Action - 从零开始,它是什么,为什么要使用它,它是如何工作的,等等。推荐给任何查看 RMQ 的人
    • RabbitMQ Layout - 了解 RabbitMQ 如何适应各种场景,正如开发人员解决问题的故事所讲述的那样 - 这是 RMQ 拓扑设计(交换、队列和绑定)的“原因”
    • RabbitMQ Patterns - 了解消息系统中的消息类型、路由和常见使用模式,如应用于 RabbitMQ - 这是使用 RMQ 进行应用程序和拓扑设计的核心模式“操作指南”

    【讨论】:

    • 谢谢。 生产者不决定将消息传递到哪个队列。它通过指定队列的名称来决定,不是吗?
    • 生产者指定发布消息的交换。交换和队列之间的 RabbitMQ 绑定,使用路由键(如果适用)确定消息发送到哪个队列。 2个例外:扇出队列,其中路由键不被使用,默认“直接”队列,其中路由键是目标队列的名称。但是,不要使用默认的直接队列。这是在做事,IME
    • 它还指定了队列。
    • 发布消息的参数包括交换名和路由键,但不包括队列名。默认的“直接”交换使用提供的路由键作为队列名称,但这不是正常行为。这是一种特殊的内置交换类型,我建议不要使用。根据您的系统需求构建您自己的交换、队列和绑定。
    • 如果不是队列名称,路由键是什么?
    猜你喜欢
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    • 2018-12-11
    • 1970-01-01
    • 2022-09-28
    • 2021-09-07
    相关资源
    最近更新 更多