文章目录

  • RabbitMQ第五个实操小案例——主题交换机(TopicExchange)

RabbitMQ第五个实操小案例——主题交换机(TopicExchange)

TopicExchangeDirectExchange 这两种交换机非常相似,Topic类型的ExchangeDirect相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型的RoutingKey必须是多个单词的列表,并用.隔开。

例如:

china.news:中国新闻的异步通讯
china.weather:中国天气的异步通信
japan.news:小日子新闻的异步通讯
japan.weather:小日子天气的异步通讯

这个东西很有意思,他是可以使用通配符的,其中

#:代表0个或多个单词
*:代表1个单词

如此,如果我们现在要监听的是中国的所有消息,那么我们的routingKey就是china.#,如果我们想监听的是所有国家的新闻,那么我们的routingKey就是*.news

废话少说,代码来一波:
配置pom导入依赖跟配置yaml文件环境的代码就不说了。

步骤一、使用@RabbitListener写我们的监听器。

    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue1"),exchange = @Exchange(name = "exchange.topic", type = ExchangeTypes.TOPIC),key = {"china.#"}))public void listenTopicQueue1(String msg){System.out.println("监听到的来自中国的消息为【"+msg+"】");}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue2"),exchange = @Exchange(name = "exchange.topic", type = ExchangeTypes.TOPIC),key = "#.news"))public void listenTopicQueue2(String msg){System.out.println("监听到的来自全世界的新闻为【"+msg+"】");}

步骤二、编写发布者,发送消息

    @Testpublic void testTopicExchange(){//交换机的名称String exchangeName = "exchange.topic";//消息String chinaNews = "这是一条来自中国的新闻!";String chinaWeather = "这是一条来自中国的天气预报!";String japanNews = "这是一条来自小日子的新闻!";String japanWeather ="这是一条来自小日子的天气预报!";//发送消息rabbitTemplate.convertAndSend(exchangeName, "china.news", chinaNews);rabbitTemplate.convertAndSend(exchangeName, "china.weather", chinaWeather);rabbitTemplate.convertAndSend(exchangeName, "japan.news", japanNews);rabbitTemplate.convertAndSend(exchangeName, "japan.weather", japanWeather);}

发布完成后,我们来看一下效果:

可以看到
1、监听china.#的监听者成功监听了来自中国的新闻和天气预报。
2、监听#.news的监听者监听到了来自全世界的新闻。

这种写法的好处就是,以后假如我们多了来自中国的其他东西,比如china.science,以及加拿大的新闻,我们的监听者都不需要修改任何代码。代码走一波,我们修改一下我们的发布者的代码。

    @Testpublic void testTopicExchange(){//交换机的名称String exchangeName = "exchange.topic";//消息String chinaNews = "这是一条来自中国的新闻!";String chinaWeather = "这是一条来自中国的天气预报!";String japanNews = "这是一条来自小日子的新闻!";String japanWeather ="这是一条来自小日子的天气预报!";//新增加的消息String chinaScience = "这是一条来自中国的科学!";String canadaNews = "这是一条来自加拿大的新闻!";//发送消息rabbitTemplate.convertAndSend(exchangeName, "china.news", chinaNews);rabbitTemplate.convertAndSend(exchangeName, "china.weather", chinaWeather);rabbitTemplate.convertAndSend(exchangeName, "japan.news", japanNews);rabbitTemplate.convertAndSend(exchangeName, "japan.weather", japanWeather);//额外发送的消息rabbitTemplate.convertAndSend(exchangeName, "china.science", chinaScience);rabbitTemplate.convertAndSend(exchangeName, "canada.news", canadaNews);}

为了方便看,我还把监听实际新闻的sout改成了err(变成红色),我们来看一下最新的效果:

可以看到,这里计算我们新加了其他的消息,我们的china.#也可以正常接收routingKey是以china开头的所有消息,而我们的#.news也可以正常接收routingKey是以news结尾的所有消息。

RabbitMQ第五个实操小案例——主题交换机(TopicExchange)相关推荐

  1. RabbitMQ第四个实操小案例——DirectExchange

    文章目录 RabbitMQ第四个实操小案例--DirectExchange RabbitMQ第四个实操小案例--DirectExchange DirectExchange:这种交换机的模式跟前面的Fo ...

  2. 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?

    从2012年开始,中国在线教育行业的市场就整体保持着高增长的趋势.随着"校外报课"逐渐成为中国家长的刚需,成人教育机构也一同进入了K12市场.在这场愈发激烈的市场竞争中,在线教育企 ...

  3. Python—实操小实验之人机PK游戏(终极版本—应用类与对象的知识点应用)

    Python-实操小实验之人机PK游戏(终极版本-应用类与对象的知识点应用) 人机PK游戏所需要的基础元素如下: ①要有玩家.敌人.生命值.攻击力,还要有计分: ②要可以互相进行攻击,攻击之后生命值要 ...

  4. git按照tag拉取代码_Git实操小课堂

    平时也多是使用 IDEA 自带的 Git 插件,简单又方便,不需要理解 Git 背后的技术,最近突然让我在 VsCode 上更新提交代码,发现又需要学习 VsCode 的插件使用,思量一番后,决定好好 ...

  5. 【程序员2公务员】五、实操指南

    步骤 公务员篇 公务员篇详解 公务员篇 行测 明确要准备的考试,如:广东2021年省考 限时做前一年行测真题并评分,树立benchmark,如:广东2020年省考真题 标出试卷中每一道题对应的题目类型 ...

  6. 30 个 Python3 的最佳实操,小贴士和窍门(附课程)

    感谢作者分享-http://bjbsair.com/2020-04-07/tech-info/30460.html 以下为译文: 年过完了,我们都纷纷回到了各自的工作岗位.新的一年新气象,我想借本文为 ...

  7. 【嵌入式Linux驱动开发】十五、实操Linux开发中的中断,编写第一个按键驱动程序

       慷慨歌燕市,从容作楚囚.   引刀成一快,不负少年头. 文章目录 一.实验目标与原理图分析 二.编写程序 2.1 修改.编译.覆盖设备树文件 2.1.1 添加 pinctrl 节点 2.1.2 ...

  8. 开年捞金蓝海项目,实操一天就赚了五百多

    这段时间我研究了很多项目,也有幸和十几位大佬深度交流了一周! 实操了10多个,基本都是适用于个人或者小工作室实操的项目,短短10天的时间,跟团队3个小伙伴在大佬的协助下做了6w的利润! 发现实操难度真 ...

  9. 计算机白板培训报道,巧用白板,增色课堂——南宁市五象教育集团小学部开展希沃白板五实操培训活动...

    原标题:巧用白板,增色课堂--南宁市五象教育集团小学部开展希沃白板五实操培训活动 南宁市五象教育集团 2020.9.22 巧用白板 增色课堂 ······● -- ●······ 近日,南宁市五象教育 ...

最新文章

  1. 面试程序员总结的通病!
  2. Oracle 同义词的创建及其作用
  3. 订阅号 图文回复php,微信开发(PHP实现订阅号的公众号配置和自动回复)
  4. win7下安装VC6LineNumberAddin方法[VC6行号插件]
  5. linux 6.5 mongdb php扩展插件,linux下为php添加mongodb扩展
  6. nginx伪静态php如何配置文件,nginx实现thinkphp伪静态的配置例子
  7. “用户体验及可用性测试”读后感
  8. 当贝投影F5发布:3000ANSI流明亮度,6S疾速开机,16ms超低延迟
  9. 不仅仅是一种爱好:了解中国的电竞市场
  10. 人工智能、机器学习和模式识别以及神经网络
  11. [LTE 架构]4G核心网EPC都有什么花花肠子 # 承载、附着、MME\SGW\PGW,EPS
  12. 【游戏作品】SUNSET——动漫风横版动作同人游戏
  13. 按年复利和连续复利的区别及计算
  14. dsp 正弦波信号发生器matlab程序,基于DSP的正弦波信号发生器源程序(汇编语言).doc...
  15. 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置?教您怎么解决
  16. 听说你不会用代码换壁纸
  17. 金融结算系统的基础业务之账户体系结构分析
  18. 相机寻找最适合分辨率android,ARCore:获取相机的分辨率(ARCore : Get Camera's resolution)...
  19. mdb转换为mysql_MS Access * .MDB转换为MySQL或SQLite,数据编码问题
  20. CF1174F Ehab and the Big Finale 树分治

热门文章

  1. 弘辽科技:如何提高淘宝收藏加购率?有哪些方法?
  2. 查找一个字符串中的所有子串的位置
  3. luat驱动LCD屏幕
  4. 双十一健身运动装备有哪些值得买?运动好物推荐分享
  5. C语言对文本进行断句,用TextView实现富文本展示,点击断句和语音播报
  6. 传统软件服务器与游戏服务器架构区别
  7. 春节小偷过年,手机放在办公桌上被偷
  8. win10在电脑中添加新用户
  9. HTML如何返回上一页
  10. (一)Linux中的网络配置