RabbitMQ 消息队列 入门 第二章(交换类型fanout)
1.安装完 RabbitMQ 之后,我们可以点击 http://localhost:15672/#/ 默认账号:guest 密码: guest
在这上面我们可以查看执行情况、管理连接、管理队列、管理通道、管理Exchange(交换所)
2.交换类型
交换类型分为:direct、topic、headers 、 fanout 四种,这一章我们先学习 fanout ,
fanout:大致如下图(类似广播),P是生产者,X是Exchange ,P把消息发给 X 然后X会下发给所有与它关联的队列排队执行
2.例子
下面我用一个订阅者跟发布者来给大家做一个例子
首先我们先创建一个发布者:
/// <summary> /// 发布者 /// </summary> public static void RabbitPublishedHost() { ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost", Port = 5672 }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "message", type: "fanout");//注意这里填写的交换类型 while (true) { Console.WriteLine("请输入要发布的消息 [enter] 发送:"); var message = Console.ReadLine(); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "message", routingKey: "", basicProperties: null, body: body); Console.WriteLine(string.Format("{0} 发布了消息:{1}", DateTime.Now.ToShortDateString(), message)); } } } } //控制台运行 static void Main(string[] args) { RabbitMQTest.RabbitPublishedHost(); }
这里是订阅者代码:
/// <summary> /// 订阅者 /// </summary> public static void RabbitSubscribeClient() { ConnectionFactory factory = new ConnectionFactory() { HostName="localhost", Port =5672 }; try { using (IConnection connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "message", type: "fanout"); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "message", routingKey: ""); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(string.Format("收到推送的消息:{0}", message)); }; channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.ReadLine(); } } }catch(Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } } //控制台运行 static void Main(string[] args) { RabbitMQTest.RabbitSubscribeClient(); }
当我们同时运行多个项目(可到bin 目录下点击运行多个消费者窗口)结果如图: