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

  • 相关阅读:
    3B1B微分方程系列笔记(一)
    洛谷P1127 【词链】欧拉通路,欧拉回路+dfs
    龟速乘,快速乘法
    单调队列优化O(N)建BST P1377 [TJOI2011]树的序
    洛谷 p4302的dp中的细节讨论
    manacher(马拉车算法)
    博弈论(入门,持续更新)
    洛谷P1295 [TJOI2011]书架 线段树优化dp,单调栈
    洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化
    洛谷 P1131 [ZJOI2007]时态同步
  • 原文地址:https://www.cnblogs.com/wuxiaozhu/p/9023456.html
Copyright © 2011-2022 走看看