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