zoukankan      html  css  js  c++  java
  • Rabbitmq(一)

                ClientA,ClientB: 为Producer,数据的发送方。

        Client1,Client2,Client3:为Consumer,数据的接收方。

        Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

        Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

        Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

        vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

        channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

    一. Exchange 

        从架构图可以看出,Procuder Publish的Message进入了Exchange。接着通过“routing keys”, RabbitMQ会找到应该把这个Message放到哪个queue里。queue也是通过这个routing keys来做的绑定。

         有三种类型的Exchanges:direct, fanout,topic。 每个实现了不同的路由算法(routing algorithm)。

    ·        Direct exchange: 如果 routing key 匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。

    ·        Fanout exchange: 会向响应的queue广播。

    ·        Topic exchange: 对key进行模式匹配,比如ab*可以传递到所有ab*的queue。

       

    1.direct  

    如果发送的消息使用routekey 和  【exchange(direct) 和queue 之间的绑定的routekey完全相等】 则消息就会由exchange 发送到绑定的队列里  

    2.topic

     

    前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定:

    • routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
    • binding key与routing key一样也是句点号“. ”分隔的字符串
    • binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)

    每个virtual host本质上都是一个RabbitMQ Server,拥有它自己的queue,exchagne,和bings rule等等。这保证了你可以在多个不同的application中使用RabbitMQ。

  • 相关阅读:
    杨辉三角
    数组的两种输出方法
    整数分割各位数
    Fibonacci
    imageview圆角的实现
    listview定位到上次显示的位置
    安卓客户端 扫描二维码登陆
    java,UDP协议简单实现
    java 反射机制的实例
    js中正则表达式 书写方法
  • 原文地址:https://www.cnblogs.com/kaikaichao/p/7161071.html
Copyright © 2011-2022 走看看