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相关推荐

  1. RabbitMq系列(九):主题交换Topic Exchange

    系列文章 RabbitMq系列(一):服务器搭建 RabbitMq系列(二):最简单的例子 RabbitMq系列(三):工作队列 RabbitMq系列(四):消息确认和持久性 RabbitMq系列(五 ...

  2. RabbitMQ的Exchange 模式之topic(主题模式)

    任何发送到Topic Exchange的消息都会被转发到所有关联RouteKey中指定"topic"的队列上上 这种模式下需要RouteKey,客户端要提前绑定Exchange与Q ...

  3. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别

    这是direct exchange写法中消息发送写法,可见下图红色框中路由键是queue队列中定义的路由键 这是topic exchange写法中消息发送写法,可见下图红色框中路由键是exchange ...

  4. RabbitMQ交换器Exchange介绍与实践

    导读 有了Rabbit的基础知识之后(基础知识详见:深入解读RabbitMQ工作原理及简单使用),本章我们重点学习一下Rabbit里面的exchange(交换器)的知识. 交换器分类 RabbitMQ ...

  5. rabbitmq+topic+java_译:5.RabbitMQ Java Client 之 Topics (主题)

    我们使用的是direct(直接交换),而不是使用只能进行虚拟广播的 fanout(扇出交换),并且有可能选择性地接收日志. 虽然使用direct(直接交换)改进了我们的系统,但它仍然有局限性 - 它不 ...

  6. RabbitMQ交换器Exchange

    交换器分类 RabbitMQ的Exchange(交换器)分为四类: direct(默认) headers fanout topic 其中headers交换器允许你匹配AMQP消息的header而非路由 ...

  7. RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  8. Topic Exchange介绍

    一.Topic Exchange介绍 topic exchange和direct exchange类似,都是通过routing key和binding key进行匹配,不同的是topic exchan ...

  9. rabbitmq的通配符模式(Topic Exchange)的*和#区别

    符号"#"匹配路由键的一个或多个词,符号"*"匹配路由键的一个词. 例如: topic.#那么这个队列会会接收topic开头的消息 topic.*.queue那 ...

最新文章

  1. Spring Boot引用本地jar包
  2. 工作295:发布逻辑处理
  3. 微软公布Netgear 固件严重漏洞详情,可盗取用户身份并攻陷系统
  4. matlab多图形相交,用MATLAB作出柱面x^2+y^2=4 和柱面x^2+z^2=4 相交的图形.
  5. 毕设项目 - 基于SSM的毕业设计管理系统(含源码+论文)
  6. 02初尝有限元分析——悬臂梁案例
  7. 2022年危险化学品经营单位安全管理人员考试练习题及模拟考试
  8. Hive 字符串转日期
  9. 【C++】运算符重载/函数的返回值为解引用
  10. 高数_第3章重积分_在柱面坐标下计算三重积分
  11. Fragment与Activity之间的完美邂逅
  12. Google地图的Street View和Mapplets
  13. 【JavaScript】网页轮播图
  14. 【原创】新韭菜日记58--20190618 很久没写了,因为套牢,因为没内容可写
  15. laravel voyager 笔记
  16. 使用Python来分离或者直接抓取pcap抓包文件中的HTTP流
  17. 计算机音乐谱水手,Aloha Heja He简谱-Achim Reichel-抖音神曲,一首德国水手老歌再次燃爆整个少年青春...
  18. 【CSS】如何实现价格文字中间划一条线
  19. 细数Xcode 6 给我们带来的新特性
  20. 传奇3单机显示服务器进不去,传奇3网游单机一键端,玩游人生传奇42魔法1.45服务端带工具...

热门文章

  1. Win32 树视图控件的基本使用
  2. 精简版开发工具使用手记(图解)
  3. pthread调度策略,优先级和竞争范围
  4. Python之创建单元素tuple
  5. ssm框架的整合搭建(一)
  6. shell 从1加到100
  7. 提取页面共性用抽象类来写页面模板
  8. [题解]BZOJ1004 序列函数
  9. JS Window.Open 打开窗口详解
  10. 用神经网络分类集合{x|x∈x}与集合{x|x ∉x}