• [MQ]RabbitMQ的概要介绍及消息路由规则


    前面列了一些MQ产品,从网上大家的反应来看,RabbitMQ是综合实力较好的一个MQ产品。这篇除了从整体上看,重点记录下RabbitMQ的消息路由规则。

    一、系统架构

    1.一个消息可以被路由到多个队列;

    2.一个队列可被多个消费者订阅,但是队列中的一个消息只会被其中一个消费者拿到;

    所以,要实现一个消息被多个消费者都拿到,需要通过交换器(群发或路由)发到不同的多个队列中,并且由消费者分别去订阅

    3.队列的创建既可以是生产者,也可以是消费者,按首次创建的原则(如已存在则跳过)

    二、消息交换器 路由规则(这部分的图是摘录的,但不知道原始出处,所以未标注来源。特说明下)

    支持四种路由规则:direct、fanout、topic、headers

    1.direct —— 根据路由关键字完全匹配队列名

    2.fanout —— 发送到所有绑定的队列 

    3.topic —— 根据路由关键字进行通配符匹配

    topic的定义规则:

    • 由一些单词用点号.连接(单词可以任意文本,但通常要体现出消息的特征);
    • 支持通配符

      *(星号)仅代表一个单词

      #(井号)代表任意个单词

    • 总长度不能超过255个字节

    举例说明:
     
     

    示例的topic由三段组成:<quick|lazy>.<颜色>.<物种>

      a.当路由关键字="quick.orange.rabbit"Q1Q2都接收到消息(规则1&2)

      b.当路由关键字="lazy.orange.elephant"Q1Q2都接收到消息(规则1&3)

      c.当路由关键字="quick.orange.fox"Q1接收到消息(规则1)

      d.当路由关键字="lazy.brown.fox"Q2接收到消息(规则3)

      e.当路由关键字="lazy.pink.rabbit"Q2接收到消息(规则2&3)消息只会到一次;

      f.当路由关键字="quick.brown.fox"消息将被丢弃;

      g.当路由关键字="lazy.orange.male.rabbit"Q2接收到消息(规则3)

    4.headers —— 可看作topic的增强版。路由关键字是一组键值对,通过多组条件组合匹配。


    主要参考链接: 
    高广超.2017.8.24 干货:这也许是最全面透彻的一篇RabbitMQ指南!
    ......(路由规则的图和示例都是摘录的,但不知道原始出处,所以未标注来源)

  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/fj365/p/13295435.html
Copyright © 2020-2023  润新知