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

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

原文地址:https://www.cnblogs.com/williamwsj/p/8093663.html