【面试问题】什么是 MQ topic 交换器(模式匹配) ?

简介: 【1月更文挑战第27天】【面试问题】什么是 MQ topic 交换器(模式匹配) ?

Topic Exchange 是消息队列系统中一种常见的交换机类型,它基于主题(Topic)进行消息的路由和匹配。在 RabbitMQ 等消息中间件中,Topic Exchange 允许消息的生产者使用带有通配符的路由键,而消费者可以通过使用相应的通配符来接收感兴趣的消息。这种模式匹配的机制提供了更灵活、更动态的消息路由方式,使得系统能够根据实际业务需求进行精确的消息传递。

Topic Exchange 的基本原理:

  1. 路由键的模式匹配:
  • Topic Exchange 允许生产者使用一定规则的路由键。路由键是一个由点分隔的单词列表,例如,"animal.rabbit.white"。在路由键中,可以使用两种通配符:* 表示匹配一个单词,# 表示匹配零个或多个单词。这样,消费者可以使用通配符来绑定队列,从而匹配符合特定条件的消息。
  1. 支持多队列绑定:
  • 与 Direct Exchange 不同,Topic Exchange 允许将多个队列绑定到同一个交换机,并通过使用不同的通配符模式进行匹配。这意味着一个消息可以被多个队列接收,每个队列根据自己的匹配规则进行筛选。
  1. 动态路由规则:
  • 主题交换机的设计目标之一是提供动态的消息路由规则。生产者和消费者可以根据实际需求定义灵活的规则,使得系统可以适应不同的业务场景。

Topic Exchange 示例说明:

考虑一个虚拟的场景,有多个生产者负责发布动物相关的消息,而多个消费者对不同类型的动物感兴趣。在这个场景中,Topic Exchange 可以被用来实现消息的动态路由。

1. 创建 Topic Exchange:

channel.exchangeDeclare("topic.exchange", BuiltinExchangeType.TOPIC);

2. 发送消息到 Topic Exchange:

StringroutingKey="animal.rabbit.white";
channel.basicPublish("topic.exchange", routingKey, null, message.getBytes());

3. 创建消费者并绑定队列到 Topic Exchange:

StringqueueName="white.rabbit.queue";
channel.queueDeclare(queueName, false, false, false, null);
// 使用通配符 # 匹配所有路由键StringbindingKey="animal.#";
channel.queueBind(queueName, "topic.exchange", bindingKey);

4. 消费者处理消息:

channel.basicConsume(queueName, true, (consumerTag, delivery) -> {
// 处理消息processMessage(delivery.getBody());
});

Topic Exchange 示例说明:

假设有多个消费者,它们分别关注不同颜色的兔子。生产者发布消息时,使用路由键指定动物、颜色等信息,而消费者通过绑定队列时的通配符进行模式匹配,以接收符合条件的消息。例如,一个消费者关注所有兔子,而另一个消费者只关注白色兔子。

// 生产者发布消息channel.basicPublish("topic.exchange", "animal.rabbit.white", null, "White Rabbit Message".getBytes());
// 消费者绑定队列并使用通配符channel.queueBind("white.rabbit.queue", "topic.exchange", "animal.#");
channel.queueBind("all.rabbit.queue", "topic.exchange", "animal.rabbit.*");

上述示例中,"white.rabbit.queue" 将匹配路由键 "animal.rabbit.white",而 "all.rabbit.queue" 将匹配所有以 "animal.rabbit." 开头的路由键。通过合理使用通配符,可以实现灵活的消息路由,并根据不同的业务需求动态调整队列的绑定关系。

总体而言,Topic Exchange 提供了一种灵活、动态的消息路由机制,适用于需要更复杂消息过滤和匹配的场景。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
IDEA之Stream表达式生成、调试
IDEA之Stream表达式生成、调试
745 1
|
消息中间件 存储 编解码
MQ 介绍|学习笔记
快速学习 MQ 介绍
1686 0
MQ 介绍|学习笔记
|
消息中间件 存储 Java
MQ系列5:RocketMQ消息的发送模式
MQ系列5:RocketMQ消息的发送模式
930 0
MQ系列5:RocketMQ消息的发送模式
|
Kubernetes 容器
k8s容器时间与服务器时间不一致问题
k8s容器时间与服务器时间不一致问题
623 0
|
存储 安全 API
调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
|
容器
layui组件table定时刷新的解决方案
layui组件table定时刷新的解决方案
556 0
|
存储 人工智能 程序员
一文彻底搞清楚C语言的数据类型和变量
本文介绍了数据类型(基本、构造、指针、空类型)、变量(使用、命名规则、作用域)和常量(字面、符号、枚举、表达式),帮助初学者理解编程基础概念。坚持学习,定能创造奇迹!
2209 1
一文彻底搞清楚C语言的数据类型和变量
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
1403 1
|
安全 Java Maven
零配置,零麻烦:MapStruct 的轻松对象映射之旅
零配置,零麻烦:MapStruct 的轻松对象映射之旅
1089 0
|
消息中间件 Java API
微服务技术系列教程(43)- SpringCloud -Zipkin环境集成
微服务技术系列教程(43)- SpringCloud -Zipkin环境集成
410 0

热门文章

最新文章