就目前来说,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可以不用指定,因为指定了也无效,该交换机会向绑定的所有队列中发送数据!
最后让我们喊出我们的口号:捉住那只兔子,炖了它!