RabbitMQ Topic exchange
生活随笔
收集整理的這篇文章主要介紹了
RabbitMQ Topic exchange
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Topic exchange
topic與之前的每個類型都不同(ps:廢話每個都是不同的)。Topic解決了我們另一個需求。舉個例子,有一個做資訊的公司,他們會收集各種科技公司的動態并且第一時間轉發出來。小編A負責微軟公司,小編B負責谷歌公司,手工去搜索文章并且看標題是否匹配再進行轉發是非常的低效的,可能小編們想要偷懶,寫一個程序去各大網站進行爬數據,對于標題中含有微軟的交給小編A,對于標題中含有谷歌的交給小編B。
是的,topic就是類似與正則進行模糊匹配routingkey,對于key需求是即確定又不完全確定的。
*代表零到多個字符
. 代表一個字符
把這個嵌套到代碼中,先看生產者部分代碼,現在發布不再是寫死的,可以在控制臺程序中輸入的。
var flag = true;while (flag){Console.WriteLine("請輸入要發布的消息 key|msg。 或者按Ctrl+ C退出");var msg = Console.ReadLine();//創建返回一個新的頻道using (var channel = RabbitMqHelper.GetConnection().CreateModel()){var msgs = msg.Split('|');//發布一個消息var body = Encoding.UTF8.GetBytes(msgs[1]);channel.BasicPublish("TopicExchange", routingKey: msgs[0], basicProperties: null, body: body);Console.Write("發布成功!");}}再把注意力轉到consumer端,可以指定路由規則。聲明了一個topic類型的exchange進行綁定。然后進行消費
bool flag = true;var key = "";while (flag){Console.WriteLine("請輸入路由正則 .代表一個字符 *代表零到多個字符");key = Console.ReadLine();if (string.IsNullOrWhiteSpace(key)){Console.Write("請輸入路由");continue;}elseflag = false;}using (var channel = RabbitMqHelper.GetConnection().CreateModel()){//根據聲明使用的隊列var QueueName = key + "Queue";//聲明交換機 headers模式channel.ExchangeDeclare("TopicExchange", ExchangeType.Topic, true, false);channel.QueueDeclare(QueueName, true, false, false, null);//進行綁定channel.QueueBind(QueueName, "TopicExchange", key, null);//創建consumbersvar consumer = new EventingBasicConsumer(channel);consumer.Received += (sender, e) =>{var msg = Encoding.UTF8.GetString(e.Body);Console.WriteLine($"{e.RoutingKey}:{msg}");};//進行消費channel.BasicConsume(QueueName, true, consumer);Console.ReadKey();}現在,讓我們把程序跑起來,并指定了 *微軟*與*谷歌*的路由
再發布幾條匹配的消息
轉載于:https://www.cnblogs.com/LiangSW/p/6209533.html
總結
以上是生活随笔為你收集整理的RabbitMQ Topic exchange的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django 学习笔记之七 实现分
- 下一篇: Ubuntu使用ssh公钥实现免密码登录