计算机应届生一定要会的JAVA面试题:RabbitMQ是如何实现消息路由的?

简介: 一个应届生去面试,可能没有什么实战经验,今天被问到一个这样的面试题,说“RabbitMQ是如何实现消息路由的?“一下子竟然不知道如何组织语言了。今天我给大家分享一下我的理解。

一个应届生去面试,可能没有什么实战经验,今天被问到一个这样的面试题,说“RabbitMQ是如何实现消息路由的?“一下子竟然不知道如何组织语言了。今天我给大家分享一下我的理解。

另外,我把往期分享的视频全部整理成一份500页的PDF面试题解析配套文档,希望能够以此来提高各位粉丝的通过率,

3c49a408152941fb99f810c374920902.gif

如何获取? :

扫描文章底部名片领取!

1、工作流程

RabbitMQ 是一个基AMQP 协议实现的分布式消息中间件。AMQP 的具体工作机制是,

f7a58c0f10df7f2b7f48ec962b564763.png

生产者把消息发送到 RabbitMQ Broker 上的Exchange 交换机上。Exchange 交换机把收到的消息根据路由规则发给绑定的队列(Queue)。最后再把消息投递给订阅了这个队列的消费者,从而完成消息的异步通讯。

其中,Exchange交换机,可以定义消息的路由规则,将消息路由到指定的队列。然后 Queue队列是消息的载体,每个消息可以根据路由规则路由到一个或者多个队列中。

2、路由策略

完成RabbitMQ消息路由的核心组件是 Exchange。而消息的路由是由Exchange类型 和 Binding 来决定的。Binding 表示建立 Queue 和 Exchange 之间的绑定关系,每一个绑定关系会存在一个 BindingKey。

通过这种方式相当于在 Exchange 中建立了一个路由关系表。生产者发送消息的时候,需要声明一个 RoutingKey(路由键),Exchange 拿到RoutingKey 之后,根据 RoutingKey 和路由表里面的 BindingKey 进行匹配,而匹配的规则是通过 Exchange类型来决定的。

在 RabbitMQ 中,默认有四种类型的 Exchange:Direct ,Fanout、Topic和Header。

Direct,叫直连,也就是完整匹配方式,需要Routing Key 和 Binding Key 完全一致,相当于点对点的发送。如图所示:

image.png


如果发送routing key为”spring”的消息,那么只有第一个队列能收到消息。

Topic: 叫主题,这种方式是通过设置通配符来动态匹配,相当于正则。就是用Routing Key 去匹配Binging Key。BingingKey支持两个通配符。

# 代表匹配0个或者多个单词

* 代表匹配不多不少一个单词

另外,BingingKey用点隔开两个单词。

,用*表示使用正则表达式进行匹配,如图所示:

image.png


有4个队列绑定到Topic类型的交换机,而且使用不同的绑定键。

如果发送routing key为"junior.abc.jvm" 的消息,那么,只有第一个队列能收到。

如果发送routing key为"senior.netty"的消息,那么,第二个队列和第三个队列能收到。

Fanout:叫广播,这种方式不需要设置Routing Key,而是把消息广播给绑定到当前 Exchange 上的所有队列上。如图所示:

image.png


只要发送消息到Fanout Exchange上,那么三个队列都能收到消息

RabbitMQ、Kafka、RocketMQ 是目前最主流的分布式消息中间件。有的同学可能对 Kafka 比较了解,有的同学可能对 RabbitMQ 比较了解。不过,在面试的时候,面试官一般会问你用过的技术组件。通过面试过程中推演出你的学习能力以及对技术的掌握能力,这个方面如果还不错的话,接触一个新的 MQ 组件所消耗的学习成本会比较小。

最后,我把往期分享的面试题全部整理成了1份10W字的文档,希望能够以此来提高各位粉丝的通过率

3c49a408152941fb99f810c374920902.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关实践学习
快速体验阿里云云消息队列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
相关文章
|
6月前
|
人工智能 Cloud Native Java
2025 年 Java 应届生斩获高薪需掌握的技术实操指南与实战要点解析
本指南为2025年Java应届生打造,涵盖JVM调优、响应式编程、云原生、微服务、实时计算与AI部署等前沿技术,结合电商、数据处理等真实场景,提供可落地的技术实操方案,助力掌握高薪开发技能。
308 2
|
4月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
7月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
400 1
|
7月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
324 3
|
6月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
521 0
|
6月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
286 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
7月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
4080 49
|
4月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
7月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
210 5

热门文章

最新文章