zoukankan      html  css  js  c++  java
  • RabbitMQ fanout类型的Exchange

    就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中。

    本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中

    fanout这个单词,我看好多都翻译为扇出。扇出是个什么鬼?不知火舞拿个扇子出去秀身材?....还是回归正题!

    反正知道fanout是在RabbitMQ中是群发的意思就OK了。

    说到群发,肯定首先是要有一群队列Queue,其次还要有一个Exchange才行!那么,来吧,翠花,上代码!!!我们在代码中详见!

    //首先创建一个连接工厂对象
    var factory = new ConnectionFactory() { HostName = "localhost", UserName = "yyt", Password = "yyt888888",VirtualHost="log" };
    //然后使用工厂对象创建一个TCP连接
    using (var connection = factory.CreateConnection()){
        //在当前连接上创建一根通信的虚拟管道
        using (var channel = connection.CreateModel()) {
            //声明一个fanout类型的交换机
            channel.ExchangeDeclare("e.products", //交换机名称
                                    "fanout"); //交换机类型     
            //声明一群队列
            channel.QueueDeclare(queue: "q.eggs",
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);
    
            channel.QueueDeclare(queue: "q.bread",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
    
            channel.QueueDeclare(queue: "q.milk",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
    
            channel.QueueBind("q.eggs", "e.products", "eggs");
            channel.QueueBind("q.bread", "e.products", "bread");
            channel.QueueBind("q.milk", "e.products", "milk");
                                
            var body = Encoding.UTF8.GetBytes("开饭啦!");              
    
            channel.BasicPublish(exchange: "e.products", //指定交换机
                                 routingKey: "eggs", //如果交换机类型为fanout,则不指定routingKey,指定了也无效,因为是群发
                                 basicProperties: null,
                                 body: body);   
        }
    }

    运行程序后,我们到RabbitMQ的web管理界面去看看。

    在浏览器地址栏中输入:localhost:15672

    输入用户名和密码进入后,在Exchange栏可以看到如下画面:

    可以看见成功创建了一个fanout类型的名为e.products的交换机Exchange。点击去看看!

    可以看见该交换机绑定了三个队列。

    接下来点开Queue标签看看:

    可以看见成功创建了三个队列,每个队列中都有一条消息。因为我们只发送了一次,而且是群发,因此三个队列中都有一条相同的消息。

    让我们分别点开每个队列看看,他们的消息是否相同。

    q.bread队列:

    q.eggs队列:

    q.milk队列:

    这三个队列的内容一模一样!这就是fanout类型交换机的群发功能。

    记住:fanout类型的交换机在发送消息的时候,RoutingKey可以不用指定,因为指定了也无效,该交换机会向绑定的所有队列中发送数据!

    最后让我们喊出我们的口号:捉住那只兔子,炖了它!

  • 相关阅读:
    selenium之css定位
    selenium之Xpath定位
    配置JAVA_HOME踩得坑 。。
    linux 怎么查看系统的环境变量 与设置jdk 系统环境变量
    jenkins添加环境变量 ,win 10的 环境变量如下,win7 就是不加也可以运行,不报 “python 不是内部命令 ” 的错误。
    win7 bat copy 一个文件 到另外的文件夹内,路径得用引号哦
    路由器原理
    mven入门
    局域网内和局域网间的通信
    详解DNS域名解析全过程
  • 原文地址:https://www.cnblogs.com/williamwsj/p/8093663.html
Copyright © 2011-2022 走看看