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可以不用指定,因为指定了也无效,该交换机会向绑定的所有队列中发送数据!

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

  • 相关阅读:
    自学入门 Python 优质中文资源索引
    Crawlab Lite 正式发布,更轻量的爬虫管理平台
    一款被大厂选用的 Hexo 博客主题
    源码解读 Golang 的 sync.Map 实现原理
    探究 Go 语言 defer 语句的三种机制
    一道快速考察 Python 基础的面试题
    编写自己的 GitHub Action,体验自动化部署
    Python 2 与 3 共存了 11 年,新年就要和它道别
    30 年前的圣诞节,Python 序章被谱写
    文言文编程火了,可我完全学不懂
  • 原文地址:https://www.cnblogs.com/williamwsj/p/8093663.html
Copyright © 2011-2022 走看看