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 学习笔记之七 实现分
- 下一篇: CISCO NAT 配置