zoukankan      html  css  js  c++  java
  • RabbitMQ(五) ——主题

    RabbitMQ(五)

    ——主题

     

    (转载请附上本文链接——linhxx)

     

    一、概述

    话题模式(topic)可以让队列绑定某一类型的消息,而不仅仅是direct模式下的具体的消息。即,其允许绑定的信息采用通配符。可以保证多重条件下,仍具备灵活性。但是,当routing key没有匹配时,仍然会丢弃消息。

    话题模式如下图所示:

     

    二、话题模式的交换机(topic exchange)

    该模式下,routing key更加灵活,支持通配符。但是,并没有正则表达式那么强大的匹配,其主要支持两个通配符。匹配是以单词作为一个整体,每个单词由点(.)隔开。通配符如下:

    1)*

    星号表示匹配一个单词。

    2)#

    井号表示匹配0个或任意个单词。

    RabbitMQ规定,每个routing key的大小不能超过255字节(bytes),因此在范围内,可以任意给key取名。

    另外,fanout和direct可以看成是特殊的topic。

    1)fanout

    当topic模式下,每个队列的routing key都就用一个#,则任意内容都会发送给全部的队列,则和fanout是一致的。

    2)direct

    当topic模式下,每个队列的routing key都不用*、#这两个通配符,则每个队列都只监听精准的routing key,则和direct是一致的。

    三、匹配实例

    如话题模式的图片中,队列q1绑定*.orange.*,q2绑定*.*.rabbit和lazy.#,则三个单词的情况下,中间单词是orange的会发给q1,最后一个单词是rabbit的会发给q2。任意lazy开头的单词(不管总单词数)都会发给q2。

    例如,当routing key是:

    1)quick.orange.rabbit 发送给q1

    2)lazy.orange.elephant 发送给q1和q2

    3)lazy.brown.fox 发给q2

    4)quick.red.rabbit 发给q2

    5)orange 谁都不发送,被丢弃

    6)lazy.orange.male.rabbit 发给q2

    ——written by linhxx

    更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。

    博客园这边,我会定期批量发布文章,如果想要实时看到最新的文章,欢迎关注微信公众号"决胜机器学习",里面有我最新的文章。linhxx
  • 相关阅读:
    16.5 函数对象
    16.4.7 无序关联容器(C++11)
    16.4.6 关联容器
    16.4.5 容器种类(外1:7种序列容器类型)
    16.4.5 容器种类(下:序列)
    # SpringBoot + Spring AMQP 整合 RabbitMQ
    RabbitMQ 消息模型
    RabbitMQ Docker 单机与集群部署
    RabbitMQ 核心概念入门
    MQ消息中间件 + JMS + AMQP 理论知识
  • 原文地址:https://www.cnblogs.com/linhxx/p/8434177.html
Copyright © 2011-2022 走看看