消息中间件RabbitMQ-主题模式(Topic)

本文介绍了RabbitMQ的主题模式,详细阐述了主题模式的工作原理和特点,包括模糊匹配规则,如'#'匹配任意字符,'*'匹配一个词。通过创建交换器,设置不同路由键(如'goods.#', '#.log', 'goods.log'),实现了消息的定向分发到关心特定主题的队列。同时,文章提供了创建队列与绑定的步骤以及代码实现示例。" 100132073,5758696,信贷评分卡开发详解,"['风控', '金融', '评分卡', '建模', '数据挖掘']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主题模式(Topic)

什么是主题模式

任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上
在这里插入图片描述
如上图所示,此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模糊匹配的意思,例如:上图中红色对列的routekey为usa.#,#代表匹配任意字符,但是要想消息能到达此对列,usa.必须匹配后面的#好可以随意。
图中usa.newsusa.weather,都能找到红色队列,符号 # 匹配一个或多个词,符号 * 匹配不多不少一个词。
因此 usa.# 能够匹配到 usa.news.XXX ,但是 usa.* 只会匹配到 usa.XXX

注:
交换器说到底是一个名称与队列绑定的列表。当消息发布到交换器时,实际上是由你所连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息。
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上

1)这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。
2)这种模式需要RouteKey,也许要提前绑定Exchange与Queue。
3)在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。
4)“#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。
5)同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息;

创建队列与绑定

1)新建一个交换器 ,类型选择topic

在这里插入图片描述

2)点击新建的交换器topictest

在这里插入图片描述

3)添加匹配规则,添加后列表如下:

在这里插入图片描述
说明:
1)paobu/bancheng/quancheng这些队列要先创建;
2)主题topictest绑定队列并设置Routing key;

代码实现

编写测试类方法:

1)goods.#

    @Test
    public void testSendTopic1() {
        rabbitTemplate.convertAndSend("topictest","goods.aaa","主题模式【goods.#】");
    }

输出结果:

quancheng接收到消息:主题模式【goods.#】

2)#.log

    @Test
    public void testSendTopic2() {
        rabbitTemplate.convertAndSend("topictest","article.content.log","主题模式【#.log】");
    }

输出结果:

paobu接收到消息:主题模式【#.log】

3)goods.log

    @Test
    public void testSendTopic3() {
        rabbitTemplate.convertAndSend("topictest","goods.log","主题模式【goods.log】");
    }

输出结果:

paobu接收到消息:主题模式【goods.log】
bancheng接收到消息:主题模式【goods.log】
quancheng接收到消息:主题模式【goods.log】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值