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

1、简介

Topic类型的Exchange与Direct相比,都是可以根据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个词

相关推荐
一条泥憨鱼13 小时前
【Redis | 黑马点评】分布式锁;Lua脚本;Redisson与看门狗 |源码万字详解
redis·分布式·lua
stark张宇14 小时前
库存扣减的“锁”事:悲观锁、乐观锁、分布式锁
redis·分布式·mysql
xianyuCcCcCCCcc17 小时前
Ceph 分布式存储:集群配置与存储池管理
运维·分布式·ceph
萧瑟余晖19 小时前
Spring Cloud分布式事务与链路追踪详解
分布式·spring·spring cloud
汤姆宝库20 小时前
预训练工程深拆:Scaling_Law、数据管线与分布式并行
分布式
pjj1985420 小时前
Spark RDD 核心知识详解:算子、依赖与执行模型
大数据·分布式·spark
浔溺21 小时前
Spark核心基石:RDD全方位深度解析(原理、算子、实战、优化)
大数据·分布式·spark
catino21 小时前
RabbitMQ详解
分布式·rabbitmq·ruby
爱吃火鸡面呀21 小时前
Spark RDD 创建与转换算子详解
大数据·分布式·spark
叶总没有会2 天前
RabbitMQ高级
分布式·rabbitmq