【面试问题】什么是 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
相关文章
|
4天前
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
4月前
|
消息中间件
RabbitMQ的 RPC 消息模式你会了吗?
【9月更文挑战第11天】RabbitMQ 的 RPC(远程过程调用)消息模式允许客户端向服务器发送请求并接收响应。其基本原理包括:1) 客户端发送请求,创建回调队列并设置关联标识符;2) 服务器接收请求并发送响应至回调队列;3) 客户端根据关联标识符接收并匹配响应。实现步骤涵盖客户端和服务器的连接、信道创建及请求处理。注意事项包括关联标识符唯一性、回调队列管理、错误处理及性能考虑。RPC 模式适用于构建可靠的分布式应用程序,但需根据需求调整优化。
|
12天前
|
消息中间件 运维 Java
招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
45岁资深架构师尼恩针对一线互联网企业面试题,特别是招商银行的高阶Java后端面试题,进行了系统化梳理。本文重点讲解如何根据应用场景选择合适的消息中间件(如RabbitMQ、RocketMQ和Kafka),并对比三者的性能、功能、可靠性和运维复杂度,帮助求职者在面试中充分展示技术实力,实现“offer直提”。此外,尼恩还提供了《尼恩Java面试宝典PDF》等资源,助力求职者提升架构、设计、开发水平,应对高并发、分布式系统的挑战。更多内容及技术圣经系列PDF,请关注【技术自由圈】获取。
|
24天前
|
消息中间件 网络协议 RocketMQ
RocketMQ Controller 模式 始终更新成本机ip
ontrollerAddr=192.168.24.241:8878 但是日志输出Update controller leader address to 127.0.0.1:8878。导致访问失败
50 3
|
2月前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
25天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
3月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
4月前
|
消息中间件 存储 缓存
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
359 7
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
|
3月前
|
消息中间件 负载均衡 算法
聊聊 RocketMQ中 Topic,Queue,Consumer,Consumer Group的关系
本文详细解析了RocketMQ中Topic、Queue、Consumer及Consumer Group之间的关系。文中通过图表展示了Topic可包含多个Queue,Queue分布在不同Broker上;Consumer组内多个消费者共享消息;并深入探讨了集群消费与广播消费模式下Queue与Consumer的关系,以及Rebalancing机制在实例增减时如何确保负载均衡。理解这些关系有助于更好地掌握RocketMQ的工作原理,提升系统运维效率。
622 2
|
5月前
|
消息中间件 开发者
【RabbitMQ深度解析】Topic交换器与模式匹配:掌握消息路由的艺术!
【8月更文挑战第24天】在消息队列(MQ)体系中,交换器作为核心组件之一负责消息路由。特别是`topic`类型的交换器,它通过模式匹配实现消息的精准分发,适用于发布-订阅模式。不同于直接交换器和扇形交换器,`topic`交换器支持更复杂的路由策略,通过带有通配符(如 * 和 #)的模式字符串来定义队列与交换器间的绑定关系。
96 2