易学笔记-RabbitMQ教程5:根据多重标准接收消息(路由器类型为:topic)

  • 根据多重标准接收消息(路由器类型为:topic)
  1. 代码基础: 易学笔记-RabbitMQ教程3:一个消息发给所有消费者(路由器类型为:fanout)
  2. 路由键的规则:
    1. 必须是一些单词的集合,而且中间用点号隔开,而且总长度不能超过255
    2. 不能出现*或者#
    3. 比如:stock.usd.nyse,nyse.vmw,quick.orange.rabbit
  3. 绑定键的规则
    1. 必须是一些单词的集合,而且中间用点号隔开,而且总长度不能超过255
    2. 特殊绑定
      1. *(星号)仅代表一个单词
      2. #(井号)代表任意个单词
  4. 路由键和绑定键的举例
    1. 比如:用三种属性描述动作消息:速度、颜色、物种:<speed>.<colour>.<species>
    2. 绑定键两种:
      1. Q1:*.orange.*
      2. Q2:
        1. *.*.rabbit
        2. lazy.#
    3. 路由键
      1. quick.orange.rabbit
        1. Q1:匹配 orange
        2. Q2:匹配 rabbit
      2. lazy.orange.elephant
        1. Q1:匹配 orange
        2. Q2:匹配 lazy
      3. quick.orange.fox
        1. Q1:匹配 orange
        2. Q2:完全不匹配
      4. lazy.brown.fox
        1. Q1:不匹配
        2. Q2:匹配 lazy
      5. lazy.pink.rabbit
        1. Q1:不匹配
        2. Q2:同时匹配rabbit和lazy,但是消息也是接收一次
      6. quick.brown.fox
        1. Q1:不匹配
        2. Q2:不匹配
      7. orange
        1. Q1:不匹配
        2. Q2:不匹配
      8. lazy .orange.male.rabbit
        1. Q1:不匹配
        2. Q2:匹配 lazy
  5. topic和fanout、direct
    1. 如果绑定键为一个 #,则与fanout等同
    2. 如果绑定键不包含任何的#和*,则与direct等同
  6. 新建生产者类:
  7. 新建消费者类:
  8. 测试:
    1. 消费者:按以下规则启动消费者
      1. 将String bingingKeys[] = {""}改为String bingingKeys[] = {"#"},启动第一个消费者;
      2. 再改为String bingingKeys[] = {"kern.*"},启动第二个消费者;
      3. 再改为String bingingKeys[] = {"*.critical"},启动第三个消费者;
      4. 再改为String bingingKeys[] = {"kern.*", "*.critical"},启动第四个消费者。
    2. 生产者:按以下规则分别启动,然后观察消费者
      1. 路由键为kern.critical 的消息:A critical kernel error;
        1.  [*] Waiting for messages. To exit press CTRL+C

           topic: #

           [x] Received 'kern.critical':'A critical kernel error.'

        2.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*

           [x] Received 'kern.critical':'A critical kernel error.'

        3.  [*] Waiting for messages. To exit press CTRL+C

           topic: *.critical

           [x] Received 'kern.critical':'A critical kernel error.'

        4.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*,*.critical

           [x] Received 'kern.critical':'A critical kernel error.'

      2. 路由键为kern.info 的消息:A kernel info;
        1.  [*] Waiting for messages. To exit press CTRL+C

           topic: #

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

        2.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

        3.  [*] Waiting for messages. To exit press CTRL+C

           topic: *.critical 不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

        4.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*,*.critical

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

      3. 路由键为auth.critical 的消息:A critical auth error;
        1.  [*] Waiting for messages. To exit press CTRL+C

           topic: #

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

        2.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

        3.  [*] Waiting for messages. To exit press CTRL+C

           topic: *.critical

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'auth.critical':'A critical auth error'

        4.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*,*.critical

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

      4. 路由键为cron.warn 的消息:A cron waning;
        1.  [*] Waiting for messages. To exit press CTRL+C

           topic: #

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

           [x] Received 'cron.warn':'A cron waning'

        2.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

        3.  [*] Waiting for messages. To exit press CTRL+C

           topic: *.critical不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'auth.critical':'A critical auth error'

        4.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*,*.critical不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

      5. 路由键为kern的消息:A cron kern:
        1.  [*] Waiting for messages. To exit press CTRL+C

           topic: #

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

           [x] Received 'cron.warn':'A cron waning'

           [x] Received 'kern':'A cron kern'

        2.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

        3.  [*] Waiting for messages. To exit press CTRL+C

           topic: *.critical不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'auth.critical':'A critical auth error'

        4.  [*] Waiting for messages. To exit press CTRL+C

           topic: kern.*,*.critical不匹配,不接收

           [x] Received 'kern.critical':'A critical kernel error.'

           [x] Received 'kern.info':'A kernel info'

           [x] Received 'auth.critical':'A critical auth error'

猜你喜欢

转载自blog.csdn.net/u011830122/article/details/83956266
今日推荐