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

  • 相关阅读:
    Java 基础入门随笔(6) JavaSE版——数组操作
    Java 基础入门随笔(5) JavaSE版——函数重载
    Java 基础入门随笔(4) JavaSE版——程序流程控制
    Java 基础入门随笔(3) JavaSE版——逻辑运算符、位运算符
    jvm第二章(二)
    jvm第二章(一)
    jvm第一章(三)
    jvm第一章(二)
    jvm第一章(一)
    Java程序初始化的顺序是怎样的?
  • 原文地址:https://www.cnblogs.com/wuxiaozhu/p/9023456.html
Copyright © 2020-2023  润新知