【面试问题】MQ 消息怎么路由?

简介: 【1月更文挑战第27天】【面试问题】MQ 消息怎么路由?

在消息队列(MQ)系统中,消息路由是指决定消息从生产者到消费者的路径的过程。消息路由的实现方式因消息队列的具体实现而异,下面以 RabbitMQ 为例,介绍消息在 RabbitMQ 中的路由机制。

RabbitMQ 中的消息路由:

RabbitMQ 使用一种称为交换机(Exchange)的机制来实现消息的路由。交换机负责将消息从生产者发送到一个或多个队列中。在消息发送时,生产者将消息发布到一个交换机,然后由交换机将消息路由到一个或多个队列。

1. 交换机类型:

RabbitMQ 提供了不同类型的交换机,每种类型的交换机都有不同的路由规则。主要的交换机类型包括:

  • Direct Exchange(直连交换机):
  • 将消息路由到与消息中的路由键(Routing Key)完全匹配的队列。这是最简单的一种路由方式。
  • Fanout Exchange(扇出交换机):
  • 将消息广播到所有绑定到交换机的队列,忽略消息的路由键。
  • Topic Exchange(主题交换机):
  • 将消息路由到一个或多个与消息的路由键匹配的队列。路由键可以使用通配符进行匹配。
  • Headers Exchange(头交换机):
  • 根据消息的头信息进行匹配,而不是路由键。可以定义一组键值对的规则,消息携带的头信息与规则匹配时才会被路由到队列。

2. 消息生产者发布消息:

生产者将消息发送到交换机,并指定一个路由键。路由键的具体值取决于交换机的类型。例如,对于 Direct Exchange,路由键表示队列的名称。

// 使用 Direct Exchange 发布消息channel.basicPublish("direct.exchange", "routing.key", null, message.getBytes());

3. 交换机根据规则路由消息:

交换机根据其类型和配置规则,将消息路由到一个或多个与之绑定的队列。

4. 消息队列消费消息:

队列的消费者监听队列,一旦队列中有消息,消费者就会收到消息并进行处理。

// 消费者从队列获取消息channel.basicConsume("queue.name", true, (consumerTag, delivery) -> {
// 处理消息processMessage(delivery.getBody());
});

5. 绑定规则:

在 RabbitMQ 中,通过绑定(Binding)规则将交换机和队列关联起来。绑定规则决定了交换机如何将消息路由到与之绑定的队列。

// 使用 Java 客户端创建绑定规则channel.queueBind("queue.name", "direct.exchange", "routing.key");
相关实践学习
快速体验阿里云云消息队列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
相关文章
|
消息中间件 架构师 Java
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
消息中间件 运维 Java
招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
45岁资深架构师尼恩针对一线互联网企业面试题,特别是招商银行的高阶Java后端面试题,进行了系统化梳理。本文重点讲解如何根据应用场景选择合适的消息中间件(如RabbitMQ、RocketMQ和Kafka),并对比三者的性能、功能、可靠性和运维复杂度,帮助求职者在面试中充分展示技术实力,实现“offer直提”。此外,尼恩还提供了《尼恩Java面试宝典PDF》等资源,助力求职者提升架构、设计、开发水平,应对高并发、分布式系统的挑战。更多内容及技术圣经系列PDF,请关注【技术自由圈】获取。
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
消息中间件 Kafka
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
424 57
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
261 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
|
消息中间件 缓存 负载均衡
复盘女朋友面试4个月的RocketMQ面试题
这篇文章复盘了面试中关于RocketMQ的高频题目,包括架构组成、使用姿势、功能原理及高级特性,并强调了理解这些实现机制对于面试成功的重要性。
复盘女朋友面试4个月的RocketMQ面试题
|
消息中间件 Kafka API
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
267 1
|
消息中间件 网络架构
RabbitMQ消息队列常见面试题
这篇文章总结了RabbitMQ的常见面试题,涵盖了消息模型、使用场景、实现功能、消息幂等性、顺序性、堆积和丢失的避免方法,以及推模式和拉模式的区别。
538 0