rabbitmq基础-java-5、Topic交换机

1、简介

Topic类型的ExchangeDirect相比,都是可以根据RoutingKey把消息路由到不同的队列。 只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!

BindingKey 一般都是有一个或多个单词组成,多个单词之间以.分割,例如: item.insert

通配符规则:

  • #:匹配一个或多个词

  • *:匹配不多不少恰好1个词

举例:

  • item.#:能够匹配item.spu.insert 或者 item.spu

  • item.*:只能匹配item.spu

图示:

假如此时publisher发送的消息使用的RoutingKey共有四种:

  • china.news代表有中国的新闻消息;

  • china.weather 代表中国的天气消息;

  • japan.news 则代表日本新闻

  • japan.weather 代表日本的天气消息;

解释:

  • topic.queue1:绑定的是china.# ,凡是以 china.开头的routing key 都会被匹配到,包括:

    • china.news

    • china.weather

  • topic.queue2:绑定的是#.news ,凡是以 .news结尾的 routing key 都会被匹配。包括:

    • china.news

    • japan.news

接下来,我们就按照上图所示,来演示一下Topic交换机的用法。 首先,在控制台按照图示例子创建队列、交换机,并利用通配符绑定队列和交换机。

2、设置队列

3、设置交换机

4、绑定队列

5、设置生产者

java 复制代码
    @Test
    void testSendTopic1() {
        String exchangeName = "test.topic";
        String msg = "china.good,今天天气真不错哦!!!";
        rabbitTemplate.convertAndSend(exchangeName, "china.good", msg);
    }
    @Test
    void testSendTopic2() {
        String exchangeName = "test.topic";
        String msg = "123.news,今天天气真不错哦!!!";
        rabbitTemplate.convertAndSend(exchangeName, "123.news", msg);
    }
    @Test
    void testSendTopic3() {
        String exchangeName = "test.topic";
        String msg = "china.news,今天天气真不错哦!!!";
        rabbitTemplate.convertAndSend(exchangeName, "china.news", msg);
    }

6、设置消费者

java 复制代码
    @RabbitListener(queues = "topic.queue1")
    public void listenTopicQueue1(String msg) throws InterruptedException {
        System.out.println("消费者1 收到了 topic.queue1的消息:【" + msg +"】");
    }

    @RabbitListener(queues = "topic.queue2")
    public void listenTopicQueue2(String msg) throws InterruptedException {
        System.out.println("消费者2 收到了 topic.queue2的消息:【" + msg +"】");
    }

7、测试

8、总结

Direct交换机与Topic交换机的差异?

  • Topic交换机接收的消息RoutingKey必须是多个单词,以 **.** 分割

  • Topic交换机与队列绑定时的bindingKey可以指定通配符

  • #:代表0个或多个词

  • *:代表1个词

相关推荐
WHS-_-20225 小时前
基于网络感知自适应树与辅助路由加速地理分布式机器学习
网络·分布式·机器学习
JLWcai202510096 小时前
核电打磨 “安全卫士”|金利威不锈钢专用树脂砂轮,合规高效双在线
mysql·mongodb·eureka·sqlite·rabbitmq·nosql·memcached
Kripath_Rion6 小时前
带你速通计算机经典论文(一):分布式系统篇
分布式·后端·架构
ACP广源盛139246256738 小时前
Ling‑3.0‑flash 昇腾 0‑Day 适配落地@ACP#IX9104 在国产高密度算力矩阵中的机遇与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
阿无,12 小时前
SpringCloudAlibaba Seata分布式事务 TCC模式
分布式
独行侠影a1 天前
SpringBoot 分布式锁实战:Redisson 解决订单超卖并发问题
spring boot·分布式·后端
运维行者_1 天前
网络监控与ITSM集成:从告警到工单,实现运维自动化闭环
开发语言·网络·分布式·后端·架构·flask·php
成为你的宁宁1 天前
【Kafka KRaft 集群】
分布式·kafka
猿长大人1 天前
C# | MediatR 入门指南:后端架构解耦
分布式·后端·架构·c#·.net
sunywz1 天前
【从零搭建物联网智能充电桩系统】选型篇:Netty、MQTT、RabbitMQ、IoTDB 为什么这么选?
物联网·rabbitmq·iotdb