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个词

相关推荐
RainbowSea7 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea7 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
数据智能老司机8 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机8 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
数据智能老司机9 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记9 小时前
【Kafka基础】Kafka工作原理解析
分布式·kafka
州周11 小时前
kafka副本同步时HW和LEO
分布式·kafka
ChinaRainbowSea12 小时前
1. 初始 RabbitMQ 消息队列
java·中间件·rabbitmq·java-rabbitmq
爱的叹息12 小时前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
千层冷面13 小时前
RabbitMQ 发送者确认机制详解
分布式·rabbitmq·ruby