一、Topic Exchange(消息模式)
TopicExchange 与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以.分割。
Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让Queue和Exchange指定BingdingKey时可以使用通配符:
`#`:匹配一个或多个词
`*`:匹配1个单词
Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: `item.insert`
举例:
`item.#`:能够匹配`item.spu.insert` 或者 `item.spu`
`item.*`:只能匹配`item.spu`
解释:
- Queue1:绑定的是`china.#` ,因此凡是以 `china.`开头的`routing key` 都会被匹配到。包括china.news和china.weather
- Queue2:绑定的是`#.news` ,因此凡是以 `.news`结尾的 `routing key` 都会被匹配。包括china.news和japan.news
二、TopicExchange 示例
实现思路如下:
1. 并利用@RabbitListener声明Exchange、Queue、RoutingKey
2. 在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
3. 在publisher中编写测试方法,向it. topic发送消息
具体步骤:
步骤一:
1.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
2.并利用@RabbitListener声明Exchange、Queue、RoutingKey
@RabbitListener(bindings = @QueueBinding( value = @Queue(name = "topic.queue1"), exchange = @Exchange(name = "it.topic", type = ExchangeTypes.TOPIC), key = "china.#" )) public void listenTopicQueue1(String msg){ System.out.println("消费者接收到topic.queue1的消息:【" + msg + "】"); } @RabbitListener(bindings = @QueueBinding( value = @Queue(name = "topic.queue2"), exchange = @Exchange(name = "it.topic", type = ExchangeTypes.TOPIC), key = "#.news" )) public void listenTopicQueue2(String msg){ System.out.println("消费者接收到topic.queue2的消息:【" + msg + "】"); }
步骤二:在publisher服务发送消息到TopicExchange
1.在publisher服务中添加测试方法
/** * topicExchange */ @Test public void testSendTopicExchange() { // 交换机名称 String exchangeName = "it.topic"; // 消息 String message = "这里是 中国新闻 !"; // 发送消息 rabbitTemplate.convertAndSend(exchangeName, "china.news", message); }
Topic Exchange总结:
Direct交换机与Topic交换机的差异:
- Topic交换机接收的消息RoutingKey必须是多个单词,以 **.** 分割
- Topic交换机与队列绑定时的bindingKey可以指定通配符
- #:代表0个或多个词
- *:代表1个词
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)