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 目录下点击运行多个消费者窗口)结果如图:

原文地址:https://www.cnblogs.com/wuxiaozhu/p/9023456.html