RabbitMQ八:交換機類型Exchange Types--Topic介紹
阿新 • • 發佈:2017-08-15
args change http 場景 標題 png nec 模擬 string
前言
上一章節,我們說了兩個類型,本章我們說一下其三:Topic Exchange
Topic Exchange
Topic Exchange – 將路由鍵和某模式進行匹配。此時隊列需要綁定要一個模式上。符號“#”匹配一個或多個詞,符號“*”匹配不多不少一個詞。因此“audit.#”能夠匹配到“audit.irs.corporate”,但是“audit.*” 只會匹配到“audit.irs”。我在RedHat的朋友做了一張不錯的圖,來表明topic交換機是如何工作的:
情景進入
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 文章,請原諒博主成為一個無恥的文檔搬運工!
- 小弟剛邁入博客編寫,文中如有不對,歡迎用板磚扶正,希望給你有所幫助。
RabbitMQ八:交換機類型Exchange Types--Topic介紹