• rabbitMQ 的三种Exchange


    rabbitMQ 的Exchange有3种路由方式:  direct、fanout、topic ,以下为详细说明

    1.  Direct Exchange

          处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。

    java代码:

    1.    Channel channel = connection.createChannel();  
    2.    channel.exchangeDeclare("exchangeName", "direct"); //路由方式是 direct
    3.    channel.queueDeclare("queueName");  
    4.    channel.queueBind("queueName", "exchangeName", "routingKey");  
    5.      
    6.    byte[] messageBodyBytes = "hello world".getBytes();  
    7.    //需要绑定路由键  
    8.    channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);  

      ps: 此时的exchange只能匹配到跟它绑定了相同routingKey的队列

    2.  Fanout Exchange

           不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

      

    java代码:

    1.    Channel channel = connection.createChannel();  
    2.    channel.exchangeDeclare("exchangeName", "fanout"); //路由方式是 fanout 
    3.    channel.queueDeclare("queueName");  
    4.    channel.queueBind("queueName", "exchangeName", "routingKey");  
    5.      
    6.    channel.queueDeclare("queueName1");  
    7.    channel.queueBind("queueName1", "exchangeName", "routingKey1");  
    8.      
    9.    byte[] messageBodyBytes = "hello world".getBytes();  
    10.    //路由键需要设置为空  
    11.    channel.basicPublish("exchangeName", "", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);  

     ps: 此时的exchange能匹配到所有与之绑定的队列

    3. Topic Exchange 

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

     

    java 代码:

    1.    Channel channel = connection.createChannel();  
    2.    channel.exchangeDeclare("exchangeName", "topic"); //路由方式是 topic
    3.    channel.queueDeclare("queueName");  
    4.    channel.queueBind("queueName", "exchangeName", "routingKey.*");  
    5.      
    6.    byte[] messageBodyBytes = "hello world".getBytes();  
    7.    channel.basicPublish("exchangeName", "routingKey.one", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);  

      ps: 此时的exchange匹配到的是绑定的routingKey名称 与  队列的routingKey规则 相匹配的队列

          例如上图的:  exchange 绑定的 routingKey 为 usa.news 的消息   与   routingKey 为 usa.weather 的消息  会发送到   队列绑定的 key 为  usa.#  的队列

                          exchange 绑定的 routingKey 为 usa.news 的消息  与   routingKey 为 europe.news的消息  会发送到   队列绑定的 key 为  #.news的队列

      

  • 相关阅读:
    speeding up your web site 前端性能优化
    数据结构与算法学习链表
    SQL Server 无法生成 FRunCM 线程
    NoSql的优缺点
    Vs2012中开发Node.js应用
    利用GNUstep在windows下编写objectc
    Hadoop HDFS学习总结
    HBase Thrift 接口的一些使用问题及相关注意事项
    .NET深入解析LINQ框架
    【翻译】ASP.NET Web API是什么?
  • 原文地址:https://www.cnblogs.com/huaixiaonian/p/9448298.html
Copyright © 2020-2023  润新知