【问题标题】:RabbitMQ - Publishing messages to queues based on message typeRabbitMQ - 根据消息类型将消息发布到队列
【发布时间】:2015-10-21 11:11:27
【问题描述】:

我是rabbitMQ的新手,需要根据消息类型发布一个或多个队列。

比方说,我收到 M1、M2、M3 类型的消息,并且有两个队列 Q1、Q2。 如果消息类型是 M1 或 M2,那么它只需要发布到队列 Q1 。 如果消息类型为 M3,则需要同时发布到 Q1 和 Q2。

请建议我怎样才能做到这一点? 谢谢。

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    Producer 会将所有消息生成到一个交换器(类型:主题),消息类型为路由键。并且交换应该使用路由键绑定到不同的队列。在您的情况下,“Q1”应该与 2 个绑定进行交换:一个“#.M2.#”和另一个“#.M2.#”。这意味着任何带有路由密钥 M1 或 M2 的交换消息都应该发送到 Q1。

    【讨论】:

      【解决方案2】:

      这就是交换、绑定和路由键允许您做的事情。

      在您的情况下,交流的类型应该是“直接”或“主题”。我认为在这个简单的场景中它对你没有太大的影响。鉴于此,我现在将使用“直接”。

      首先你需要创建你的交易所

      • 交换名称:ex1
      • 交换类型:直接

      接下来,创建您的队列。

      • 第一季度
      • 第二季度
      • 第三季度

      重要的部分是在此之后发生的事情:交换器和队列之间的绑定。

      根据您的描述,我看到消息流的以下要求:

      • M1 -> Q1
      • M2 -> Q1
      • M3 -> Q1
      • M3 -> Q2

      这些基本上是您需要创建的从交换到队列的绑定,其中消息类型是路由键。

      如果您想更完整地记录它,它看起来像这样。

      |交流 |路由键 |队列 | | -------- | ------------ | ----- | |例1 | M1 |第一季度 | |例1 | M2 |第一季度 | |例1 | M3 |第一季度 | |例1 | M3 | Q2 |

      现在,当向此交换器发布消息时,您可以将消息类型设置为路由键。这将确保消息流向正确的队列。

      直接与主题交流

      直接交换和主题交换之间的主要区别 - 这是您在此处拥有的两个实际选项 - 是直接交换对路由键进行文字字符串匹配,而主题交换允许模式匹配。

      如果您有复杂的路由要求和高度结构化的路由键(高度结构化,如“this.that.whatever.something”类型的格式),那么主题交换是更好的选择。主题允许您将部分路由键匹配到特定的路由和队列。

      使用哪种类型的交换的问题并不总是显而易见的。我倾向于默认直接交换......但我没有很好的理由。很多人会告诉你,你应该默认主题交换。我认为这不重要。更重要的问题是了解何时需要主题和模式匹配。我写了a short ebook on rabbitmq layout,它使用基于现实世界经验的故事来解释何时使用哪一个的一些差异,如果你有兴趣的话。

      【讨论】:

        猜你喜欢
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 2016-06-19
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 2021-07-21
        相关资源
        最近更新 更多