zoukankan      html  css  js  c++  java
  • Rabbitmq交换机三种模式介绍

    1、topic

    将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.*” 只会匹配到“abc.def”。

    任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上

    1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。

    2.这种模式需要RouteKey,也许要提前绑定Exchange与Queue。

    3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。

    4.“#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。

    5.同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。

    介于订阅模式与点对点模式之间

    2、direct

    处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。

    如果一个队列绑定到该交换机上要求路由键 “abc”,则只有被标记为“abc”的消息才被转发,不会转发abc.def,也不会转发dog.ghi,只会转发abc。

    任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。

    1.一般情况可以使用rabbitMQ自带的Exchange:””(该Exchange的名字为空字符串,下文称其为default Exchange)。

    2.这种模式下不需要将Exchange进行任何绑定(binding)操作

    3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

    4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

    相当于点对点模式

    3、fanout

    不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。

    很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

    任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。

    1.可以理解为路由表的模式

    2.这种模式不需要RouteKey

    3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。

    4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

    相当于订阅模式

     
    rabbitmq在window系统安装步骤
    https://blog.csdn.net/hzw19920329/article/details/53156015
    注意:
    在代码中调用(rabbitTemplate.convertAndSend())时三个参数要填满,示例:
    topic :  rabbitTemplate.convertAndSend("exchangename","routing-key","content")
    direct :   rabbitTemplate.convertAndSend("exchangename","routing-key","content") -- 自定义的交换机
                  rabbitTemplate.convertAndSend("exchangename","","content") -- 使用rabbitmq自带的交换机
    fanout:   rabbitTemplate.convertAndSend("","routing-key","content")   -- 使用routing-key识别把消息放到哪个队列中
  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/lu51211314/p/9591715.html
Copyright © 2011-2022 走看看