RabbitMQ八:交換機類型Exchange Types--Topic介紹

前言

上一章節,咱們說了兩個類型,本章咱們說一下其三:Topic Exchange網站

Topic Exchange spa

Topic Exchange – 將路由鍵和某模式進行匹配。此時隊列須要綁定要一個模式上。符號「#」匹配一個或多個詞,符號「*」匹配很少很多一個詞。所以「audit.#」可以匹配到「audit.irs.corporate」,可是「audit.*」 只會匹配到「audit.irs」。我在RedHat的朋友作了一張不錯的圖,來代表topic交換機是如何工做的: code

情景進入blog

 Topic解決了咱們另外一個需求。舉個例子,有一個作資訊的公司,他們會收集各類科技公司的動態而且第一時間轉發出來。小編A負責小米公司,小編B負責華爲公司,手工去搜索文章而且看標題是否匹配再進行轉發是很是的低效的,可能小編們想要偷懶,寫一個程序去各大網站進行爬數據,對於標題中含有小米的交給小編A,對於標題中含有華爲的交給小編B。隊列

代碼塊

 發佈者:

         /// <summary>
        /// Topic實現   模擬場景: 對於標題中含有小米的交給小編A,對於標題中含有華爲的交給小編B。 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            var flag = true;
            while (flag)
            {
                Console.WriteLine("請輸入要發佈的消息key|msg");
                var msg = Console.ReadLine();
                if (msg != null && msg != "")
                    using (var channel = HelpConnection.GetConnection().CreateModel())
                    {
                        channel.ExchangeDeclare("TopicExchange", ExchangeType.Topic, true, false, null);
                        var msgs = msg.Split('|');
                        var body = Encoding.UTF8.GetBytes(msgs[1]);

                        Console.WriteLine("發佈內容:鍵" + msgs[0]);
                        Console.WriteLine("發佈內容:值" + msgs[1]);
                        channel.BasicPublish("TopicExchange", msgs[0], null, body);
                        Console.WriteLine("發佈成功");
                    }
                else {
                    flag = true;
                }
            }
            Console.ReadKey();
        }

消費端

  /// <summary>
        /// Topic實現   模擬場景: 對於標題中含有小米的交給小編A,對於標題中含有華爲的交給小編B。 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            bool flag = true;
            var key = "";
            while (flag)
            {
                Console.WriteLine("請輸入路由正則, .表明字符,*表明零到多個字符");
                key = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(key))
                {
                    Console.Write("請輸入路由");
                    flag = true;
                }
                else
                {
                  //  flag = false;
                    using (var channel = HelpConnection.GetConnection().CreateModel())
                    {
                        var queueName = key + "Queue";

                        channel.ExchangeDeclare("TopicExchange", ExchangeType.Topic, true, false, null);

                        channel.QueueDeclare(queueName, true, false, false, null);

                        channel.QueueBind(queueName, "TopicExchange", key, null);

                        var consumer = new EventingBasicConsumer(channel);

                        consumer.Received += (mode, e) =>
                        {
                            var body = Encoding.UTF8.GetString(e.Body);

                            Console.WriteLine("顯示內容:" + body);
                        };
                        channel.BasicConsume(queueName, true, consumer);
                        Console.ReadKey();
                    }
                }
            }
        }

效果圖路由

 

  • 博主是利用讀書、參考、引用、抄襲、複製和粘貼等多種方式打形成本身的純鍍 24k 文章,請原諒博主成爲一個無恥的文檔搬運工!
  • 小弟剛邁入博客編寫,文中若有不對,歡迎用板磚扶正,但願給你有所幫助。
相關文章
相關標籤/搜索