【面试问题】什么是 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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
消息中间件
RabbitMQ的 RPC 消息模式你会了吗?
【9月更文挑战第11天】RabbitMQ 的 RPC(远程过程调用)消息模式允许客户端向服务器发送请求并接收响应。其基本原理包括:1) 客户端发送请求,创建回调队列并设置关联标识符;2) 服务器接收请求并发送响应至回调队列;3) 客户端根据关联标识符接收并匹配响应。实现步骤涵盖客户端和服务器的连接、信道创建及请求处理。注意事项包括关联标识符唯一性、回调队列管理、错误处理及性能考虑。RPC 模式适用于构建可靠的分布式应用程序,但需根据需求调整优化。
|
6天前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
1月前
|
消息中间件 存储 缓存
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
146 7
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
|
16天前
|
消息中间件 负载均衡 算法
聊聊 RocketMQ中 Topic,Queue,Consumer,Consumer Group的关系
本文详细解析了RocketMQ中Topic、Queue、Consumer及Consumer Group之间的关系。文中通过图表展示了Topic可包含多个Queue,Queue分布在不同Broker上;Consumer组内多个消费者共享消息;并深入探讨了集群消费与广播消费模式下Queue与Consumer的关系,以及Rebalancing机制在实例增减时如何确保负载均衡。理解这些关系有助于更好地掌握RocketMQ的工作原理,提升系统运维效率。
46 2
|
2月前
|
消息中间件 开发者
【RabbitMQ深度解析】Topic交换器与模式匹配:掌握消息路由的艺术!
【8月更文挑战第24天】在消息队列(MQ)体系中,交换器作为核心组件之一负责消息路由。特别是`topic`类型的交换器,它通过模式匹配实现消息的精准分发,适用于发布-订阅模式。不同于直接交换器和扇形交换器,`topic`交换器支持更复杂的路由策略,通过带有通配符(如 * 和 #)的模式字符串来定义队列与交换器间的绑定关系。
53 2
|
2月前
|
消息中间件
RabbitMQ广播模式
RabbitMQ广播模式
48 1
|
2月前
|
消息中间件 缓存 负载均衡
复盘女朋友面试4个月的RocketMQ面试题
这篇文章复盘了面试中关于RocketMQ的高频题目,包括架构组成、使用姿势、功能原理及高级特性,并强调了理解这些实现机制对于面试成功的重要性。
复盘女朋友面试4个月的RocketMQ面试题
|
2月前
|
负载均衡 前端开发 API
我希望在系统设计面试之前知道的 12 种微服务模式
我希望在系统设计面试之前知道的 12 种微服务模式
|
2月前
|
消息中间件 应用服务中间件 网络安全
rabbitMQ镜像模式搭建
rabbitMQ镜像模式搭建
|
3月前
|
消息中间件 传感器 负载均衡
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ使用问题之如何配置一主一从的同步复制模式