RabbitMQ 是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用 RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性受到越来越多企业的青睐。作为一个合格的开发者,有必要深入地了解 RabbitMQ 的相关知识,为自己的职业生涯添砖加瓦。
image今天咱们就来一起学习一下连阿里架构师都在推荐渣渣们学习的《RabbitMQ实战指南》以及关于RabbitMQ面试官们最喜欢问的面试题和解答。
另外,前两天用XMind画了一张导图记录RabbitMQ的学习大纲,这里只能用图片的形式,不过源文件对个节点都有详细的解释,若是想下载源文件以及前面说的《RabbitMQ实战指南》和面试解析笔记,可以转发一下然后【点击 “MQ” 】来获取免费的下载方式!
image正式步入今天的主题《RabbitMQ实战指南》
共 有11 个章节,前后章节都有相关的联系,基本上按照由浅入深、由表及里的层次逐层进行讲解。如果读者对其中的某些内容已经掌握,可以选择跳过而翻阅后面的内容,不过还是建议读者按照先后顺序进行阅读。
image-
第 1 章 RabbitMQ 简介 :针对消息中间件做一个摘要性介绍,包括什么是消息中间件、消息中间件的作用及特点等。之后引入 RabbitMQ ,对其历史和相关特点做一个简要概述。本章最后介绍RabbitMQ 的安装及生产、消费的使用示例。
-
第 2 章 RabbitMQ 入门 :讲述RabbitMQ的入门知识,包括生产者、消费者、队列、交换器、路由键、绑定、连接及信道等基本术语。本章还阐述了RabbitMQ与 AMQP 协议的对应关系。
-
第 3 章 客户端开发向导 :介绍 RabbitMQ 客户端开发的简单使用,按照个生命周期对连接、创建、生产、消费及关闭等几个方面进行宏观的介绍。
-
第 4 章 RabbitMQ 进阶 :介绍数据可靠性的 些细节,井展示 RabbitMQ 的几种己具备或衍生的高级特性,包括TTL、死信队列、延迟队列、优先级队列、 RPC 等,这些功能在实际使用中可以让某些应用的实现变得事半功倍。
-
第 5 章 RabbitMQ 管理 :围绕 RabbitMQ 管理这个主题展开,包括多租户、权限、用户、应用和集群管理、服务端状态等方面,井且从侧面讲述 rabbitmqctl 工具和 rabbitmq_management 插件的使用。
-
第 6 章 RabbitMQ 配置 :讲述 RabbitMQ 的配置,以此可以通过环境变量、配置文件、运行时参数(和策略)等三种方式来定制化相应的服务。
-
第 7 章 RabbitMQ 运维 :围绕运维层面展开论述,主要包括集群搭建、日志查看、故障恢复、集群迁移、集群监控这几个方面。
-
第 8 章 跨越集群的界限 :讲述 Federation Shovel 这两个插件的使用、细节及相关原理 区别于第7章中集群的部署方式, Federation Shovel 可以部署在广域网中,为RabbitMQ 提供更广泛的应用空间。
-
第 9 章 RabbitMQ 高阶 :介绍 RabbitM 相关的一些原理,主要内容包括RabbitM 存储机制、磁盘和内存告警、流控机制、镜像队列。了解这些实现的细节及原理十分必要,它们可以让读者在遇到问题时能够透过现象看本质
-
第 10 章 网络分区 :围绕网络分区进行展开,具体阐述网络分区的意义,如何查看和处理网络分区,以及网络分区所带来的影响。
-
第 11 章 RabbitMQ 扩展 :探讨RabbitM 的两个扩展内容:消息追踪及负载均衡。消息追踪可以有效地定位消息丢失的问题。负载均衡本身属于运维层面,但是负载均衡一般需要借助第三方的工具-HAProxyLVS 等实现,故本书将其视为扩展内容。
RabbitMQ面试二十三连问
-
问题一:RabbitMQ 中的 broker 是指什么?cluster 又是指什么?
-
问题二:什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的?
-
问题三:RAM node 和 disk node 的区别?
-
问题四:RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
-
问题五:RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?
-
问题六:vhost 是什么?起什么作用?
-
问题七:在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及进行 binding 会有什么不同?
-
问题八:客户端连接到 cluster 中的任意 node 上是否都能正常工作?
-
问题九:cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了mirrored queue ,这时 node 失效会对 consumer 产生什么影响?
-
问题十:能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?
-
问题十一:为什么 heavy RPC 的使用场景下不建议采用 disk node ?
-
问题十二:向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?
-
问题十三:routing_key 和 binding_key 的最大长度是多少?
-
问题十四:RabbitMQ 允许发送的 message 最大可达多大?
-
问题十五:什么情况下 producer 不主动创建 queue 是安全的?
-
问题十六:“dead letter”queue 的用途?
-
问题十七:为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?
-
问题十八:什么情况下会出现 blackholed 问题?
-
问题十九:如何防止出现 blackholed 问题?
-
问题二十:Consumer Cancellation Notification 机制用于什么场景?
-
问题二十一:Basic.Reject 的用法是什么?
-
问题二十二:为什么不应该对所有的 message 都使用持久化机制?
-
问题二十三:RabbitMQ 中的 cluster、mirrored queue,以及 warrens 机制分别用于解决什么问题?存在哪些问题?
Java高级面试解析之消息队列(面试官心里分析+面试题剖析)
- 1.为什么使用消息队列 ?消息队列有什么优点和缺点?Kafka 、ActiveMQ 、RabbitMQ 、RocketMQ 都有什么优点和缺点?
- 2. 如何保证消息队列的高可用?(RabbitMQ 的高可用性+Kafka 的高可用性)
- 3. 如何保证消息不被重复消费 ?或者说 ,如何保证消息消费的幂等性 ?
- 4. 如何保证消息的可靠性传输 ? 或者说 ,如何处理消息丢失的问题 ?
- 5. 如何保证消息的顺序性 ?
- 6. 如何解决消息队列的延时以及过期失效问题 ? 消息队列满了以后该怎么处理 ?有几百万消息 持续积压几小时 ,说说怎么解决 ?
- 7. 如果让你写一个消息队列 ,该如何进行架构设计 ?说一下你的思路 ?
撒花环节
RabbitMQ用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,所以发展到今天,被越来越多的人认可。因此RabbitMQ对于每一个想提升自己的Java程序员来说,都是一个必备的硬性条件,没有理由不学,也没有理由不把它学好。
今天咱们说的这个《RabbitMQ实战指南》、自己手绘的学习大纲(xmind文件)、RabbitMQ面试二十三连问以及整理的Java高级面试必备的七大消息队列题(面试官心里分析+面试题剖析),其实都是我们平时学习、面试必备的东西。如果这些你都没有,小编都可免费分享,但是记住,点击下面的链接免费获取下载方式!!!
《分布式技术专题:Nginx+ZooKeeper+RabbitMQ+ActiveMQ+Kafka+memcached+MongoDB+Redis等》
网友评论