56net亚洲必赢-www.56.net-必赢56net登录网址

热门关键词: 56net亚洲必赢,www.56.net,必赢56net登录网址,必赢56net

Fanout Exchange 转发消息是最快的

2019-11-30 20:37 来源:未知

AMQP左券中的核心情想正是坐褥者和消费者隔开,生产者从不直接将音讯发送给队列。生产者常常不清楚是不是叁个新闻会被发送到队列中,只是将消息发送到多个交流机。先由Exchange来选用,然后Exchange依照一定的焦点转向到Queue举行仓库储存。同理,消费者也是这么。Exchange 就就如于四个交流机,转载种种消息分发到相应的系列中。

 

  RabbitMQ提供了多样Exchange格局:fanout,direct,topic,header 。 header形式在骨子里运用中非常少,本文只对前二种格局张开相比较。

 

  一. Fanout Exchange

   图片 1

  全数发送到Fanout Exchange的新闻都会被转载到与该Exchange 绑定(Binding卡塔尔(قطر‎的富有Queue上。

  Fanout Exchange  不须求管理RouteKey 。只须要简单的将队列绑定到exchange 上。这样发送到exchange的音讯都会被转载到与该沟通机绑定的保有队列上。相似子网广播,每台子网内的主机都得到了生机勃勃份复制的消息。

  所以,Fanout Exchange 转载新闻是最快的。

 

图片 2

     /// <summary>
        /// 生产者
        /// </summary>
        /// <param name="change"></param>
        private static void ProducerMessage(MyMessage msg)
        {
            var advancedBus = CreateAdvancedBus();

            if (advancedBus.IsConnected)
            {
                var exchange = advancedBus.ExchangeDeclare("user", ExchangeType.Fanout);

                advancedBus.Publish(exchange, "", false, new Message<MyMessage>(msg));
            }
            else
            {
                Console.WriteLine("Can't connect");
            }

        }

        /// <summary>
        /// 消费者
        /// </summary>
        private static void ConsumeMessage()
        {
            var advancedBus = CreateAdvancedBus();
            var exchange = advancedBus.ExchangeDeclare("user", ExchangeType.Fanout);

            var queue = advancedBus.QueueDeclare("user.notice.wangwu");
            advancedBus.Bind(exchange, queue, "user.notice.wangwu");
            advancedBus.Consume(queue, registration =>
            {
                registration.Add<MyMessage>((message, info) => { Console.WriteLine("Body: {0}", message.Body); });
            });
        }

图片 3

           适用处景:

                第风流倜傥:大型游戏者在玩网络游戏的时候,能够用它来播放重大音信。那让自家想到电影微微一笑很倾城中,有款游戏须求在世界上发布游戏用户重大音信,恐怕这些就是用的MQ达成的。那让本人不禁肃然生敬肖奈,人家在高校的时候就掌握RabbitMQ的这种特征了。

                第二:体育新闻实时更新到手提式有线电话机客户端。

                第三:群聊效用,广播音讯给当下群聊中的全部人。

  二. Direct Exchange

   图片 4

  全体发送到Direct Exchange的信息被转正到RouteKey中钦点的Queue。

  Direct格局,能够选用rabbitMQ自带的Exchange:default Exchange 。所以无需将Exchange进行任何绑定(binding卡塔尔国操作 。消息传递时,RouteKey必得完全匹配,才会被队列选取,不然该音讯会被甩掉。

图片 5

     /// <summary>
        /// 生产者
        /// </summary>
        /// <param name="change"></param>
        private static void ProducerMessage(MyMessage msg)
        {
            var advancedBus = CreateAdvancedBus();

            if (advancedBus.IsConnected)
            {
                var queue = advancedBus.QueueDeclare("user.notice.zhangsan");

                advancedBus.Publish(Exchange.GetDefault(), queue.Name, false, new Message<MyMessage>(msg));
            }
            else
            {
                Console.WriteLine("Can't connect");
            }

        }

        /// <summary>
        /// 消费者
        /// </summary>
        private static void ConsumeMessage()
        {
            var advancedBus = CreateAdvancedBus();

            var exchange = advancedBus.ExchangeDeclare("user", ExchangeType.Direct);

            var queue = advancedBus.QueueDeclare("user.notice.lisi");

            advancedBus.Bind(exchange, queue, "user.notice.lisi");

            advancedBus.Consume(queue, registration =>
            {
                registration.Add<MyMessage>((message, info) =>
                {
                    Console.WriteLine("Body: {0}", message.Body);
                });
            });
        }

图片 6

 

  三. Topic Exchange

   图片 7

  全数发送到Topic Exchange的音信被转正到独具关切RouteKey中钦点Topic的Queue上,

  Exchange 将RouteKey 和某Topic 实行模糊相称。当时队列须要绑定一个Topic。能够应用通配符进行模糊相称,符号“#”相配多少个或多少个词,符号“*”相称十分的少不菲一个词。因而“log.#”能够包容到“log.info.oa”,不过“log.*” 只会同盟到“log.error”。

  所以,Topic Exchange 使用极度灵活。

图片 8

     /// <summary>
        /// 生产者
        /// </summary>
        /// <param name="change"></param>
        private static void ProducerMessage(MyMessage msg)
        {
            //// 创建消息bus
            IBus bus = CreateBus();

            try
            {
                bus.Publish(msg, x => x.WithTopic(msg.MessageRouter));
            }
            catch (EasyNetQException ex)
            {
                //处理连接消息服务器异常 
            }

            bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象
        }

        /// <summary>
        /// 消费者
        /// </summary>
        private static void ConsumeMessage(MyMessage msg)
        {
            //// 创建消息bus
            IBus bus = CreateBus();

            try
            {
                bus.Subscribe<MyMessage>(msg.MessageRouter, message => Console.WriteLine(msg.MessageBody), x => x.WithTopic("user.notice.#"));
            }
            catch (EasyNetQException ex)
            {
                //处理连接消息服务器异常 
            }
        }

图片 9

        使用境况:

               消息的归类更新

               同意任务七个工我协和造成

               同一难题亟待一定职员知道

         Topic Exchange的运用情形非常多,大家厂商就在动用这种形式,将足球事件新闻透露,供给接收那一个事件音信的人只须要绑定对应的Exchange就能够获得最新音信。

 

出处:

版权声明:本文由56net亚洲必赢发布于体育新闻,转载请注明出处:Fanout Exchange 转发消息是最快的