美文网首页javaWeb学习java
RabbitMQ的三大消息模式

RabbitMQ的三大消息模式

作者: 名字是乱打的 | 来源:发表于2019-09-30 01:15 被阅读0次

    一 直接模式(Direct)

    什么是Direct模式 --一对一模式

    我们需要将消息发给唯一 一个节点时使用这种模式,这是最简单的一种形式。

    任何发送到DirectExchange的消息都会被直接转发到RouteKey中指定的Queue。
    1.一般情况可以使用rabbitMQ自带的Exchange:""(该Exchange的名字为空字符串,下文称其为defaultExchange)。
    2.这种模式下不需要将Exchange进行任何绑定(binding)操作
    3.消息传递时需要一个“RoutingKey”,可以简单的理解为要发送到的队列名字。
    4.如果vhost中不存在RoutingKey中指定的队列名,则该消息会被抛弃。
    

    二 分列模式(Fanout)--广播模式一对多

    什么是分列(Fanout)模式

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

    • 1.可以理解为路由表的模式
    • 2.这种模式不需要RoutingKey
    • 3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。
    • 4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

    分别模式要让交换器绑定队列

    (1)在queue中添加队列zyhglod和zyhsilver
    (2)新建交换器makemoney

    三 主题模式 --多对多模式

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


    如上图所示
    此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模糊匹配的意思,例如:上图中红色对列的RoutingKey为usa.#,#代表匹配任意字符,但是要想消息能到达此对列,usa.必须匹配,后面的#可以随意。图中usa.news usa.weather,都能找到红色队列,符号#匹配一个或多个词符号*只匹配一个词。因此usa.#能够匹配到usa.news.XXX,但是usa.*只会匹配到usa.XXX。

    注: 交换器 说到底 是一个名称与队列绑定的列表
    当消息发布到交换器时,实际上是由你所连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息。

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

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

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

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

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

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

    三大模式demo

    相关文章

      网友评论

        本文标题:RabbitMQ的三大消息模式

        本文链接:https://www.haomeiwen.com/subject/ynpfpctx.html