字节跳动3-3大牛力荐!RabbitMQ实战指南:消息队列面试必刷手册
lipiwang 2024-12-02 22:05 16 浏览 0 评论
前言
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解。
以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。
RabbitMQ就是这样一款我们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。
RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。
因篇幅限制,我会尽可能多地给大家展示文章内容,完整内容已备好,感兴趣想要获取的朋友,帮忙点赞转发下,后台私信【笔记】,获取免费下载方式。
第1章RabitMQ简介
本章首先针对消息中间件做了一个重要性的介绍,包括什么是消息中间件、消息中间件的作用及消息中间件的特点等。之后引入RabitMQ, 对其历史做-一个简单的阐述,比如RabbitMQ具备哪些特点。本章后面的篇幅介绍了RabbiMQ的安装及简单使用,通过演示生产者生产消息,以及消费者消费消息来给读者一个对于RabbitMQ的最初的印象,为后面的探索过程打下基础。
第2章RabbitMQ入门
本章主要讲述的是RabitMQ 的入门知识,首先介绍了生产者(Producer)、消费者(Consumer)、队列(Queue)、 交换器(Exchange)、 路由键(RoutingKey). 绑定( Binding)、连接(Connection)和信道(Channel)等基本术语,还介绍了交换器的类型: fanout. direct, topic和headers.之后通过介绍RabbiMQ的运转流程来加深对基本术语的理解。RabbitMQ可以看作AMQP协议的具体实现,2.2 节还大致介绍了AMQP命令以及与RabbitMQ客户端中方法如何- --对应, 包括对各个整个生产消费消息的AMQP命令的流程介绍。最后展示了AMQP 0-9-1中常用的命令与RabbitMQ客户端中方法的映射关系。
第3章客户端开发向导
本章主要介绍RabbitMQ客户端开发的简单使用,按照一个生命周期的维度对连接、创建、生产、消费和关闭等几个方面进行笼统的介绍,读者学习完本章的内容之后,就能够有效地进行与RabbitMQ相关的开发工作。知是行之始,行是知之成,不如现在动手编写几个程序来实践一下吧。
第4章RabbitMQ进阶
提升数据可靠性有以下一些途径:设置mandatory参数或者备份交换器(immediate参数已被淘汰):设置publisher confrm机制或者事务机制:设置交换器、队列和消息都为持久化;设置消费端对应的autoAck参数为false 并在消费完消息之后再进行消息确认。本章不仅介绍了数据可靠性的一些细节, 还展示了RabbitMQ 的几种已具备或者衍生的高级特性,包括TIL、死信队列、延迟队列、优先级队列、RPC功能等,这些功能在实际使用中可以让相应应用的实现变得事半功倍。
第5章RabbitMQ管理
本章的内容主要围绕RabbitMQ的管理这个主题展开,包括多租户、权限、用户、应用和集群管理、服务端状态等方面,这些都可以通过rabbitmgct1 这一系列的工具来管控。.rabbitmgetl也是RabbitMQ 中最复杂的CLI管理工具,本章也基本涵盖了大部分的rabbi tmgct1工具的使用细节。在使用相关命令时,完全可以把本章的内容作为- -个使用手册来查阅。本章还有-一个重点就是rabbi tmq_ management 插件,它在提供用户图形化的管理理解功能之余,还提供了相应的监控功能。不仅如此,rabbi tmq_ management插件还提供了HTTP API接口以方便用户调用,比如在后面7.4节和7.5节中所讲到的一些功能都需要相关的HTTP API接口的协助。.
第6章RabbitMQ配置
RabbitMQ在配置这方面可谓相当完善,在很多情况下都可以使用默认的配置而不需要改变其中任何一个就可以让RabbitMQ很好地提供服务。不过也有- -些特殊的情况,比如默认的5672端口被其他的应用程序所占用,那么就需要修改环境变量RABBITMQ_ NODE_ PORT或者改配置文件中的tcp_ listeners. 如果需要尽可能地发挥RabiMQ本身的性能,那么对于配置参数的调优就显得至关重要了,比如禁用Nagle算法或者增大TCP缓冲区的大小可以提高吞吐量,更多的细节等待着读者慢慢地发掘。
第7章RabbitMQ运维
RabbitMQ作为一个成熟的消息中间件,不仅要为应用提供强大的功能支持,也要能够维护自身状态的稳定,而这个维护就需要强大的运维层面的支撑。运维本身就是-一个大学间,涵盖多方面的内容,比如容量评估、资源分配、集群管控、系统调优、升级扩容、故障修复、控告警、负载均衡等。本章从最基本的集群搭建开始到故障修复,从集群迁移再到集群监控井不要求能解决所有RabbitMQ 的运维问题,希望能够在多个层面为读者提供解决问题的方法和方法思路。
第8章跨越集群的界限
RabbitMQ可以通过3种方式实现分布式部署:集群、Federation 和Shovel.这3种方式不是互斥的,可以根据需要选择其中的一种或者以几种方式的组合来达到分布式部署的目的。Federation和Shovel可以为RabitMQ的分布式部署提供更高的灵活性,但同时也提高了部署的复杂性。
本章主要阐述Federation与Shovel 的相关的原理、用途及使用方式等。最后在小结部分中将集群与Federation/Shovel的部署方式进行对比区分,以加深对相关知识点的理解。
第9章RabbitMQ高阶
本章首先讲述了RabitMQ 的存储机制,进而对队列的结构展开讨论,队列中的消息有alpha、beta. gamma. delta 这4种状态,内部存储又可以分为Q1、Q2. Delta、 Q3. Q4这5个子队列。消息会在这5个子队列中流转,因为性能的提升需要尽可能地避免消息过量堆积。如果消息是持久化的,建立搭配惰性队列使用,这样在提升性能的同时还可以降低内存的损耗。内存、磁盘和流控都是用来限制消息流入得过快以避免相应的服务进程来不及处理而崩溃。镜像队列的引入可以极大地提升RabbitMQ的可用性及可靠性,提供了数据冗余备份、避免单点故障的功能,强烈建议在实际应用中为每个重要的队列都配置镜像。
第10章网络分区
网络分区是在使用RabiMQ时所不得不面对的一个问题,网络分区的发生可能会引起消息丢失或者服务不可用等。可以简单地通过重启的方式或者配置自动化处理的方式来处理这个问题,但深究其里会发现网络分区不是想象中的那么简单。本章通过网络分区的意义、影响、处理及案例分析等多个维度来一一剖析其中的奥秘。
第11章RabbitMQ扩展
有关RabbitMQ的概念介绍、结构模型、客户端应用等可以看作基础篇,有关RabitMQ的管理、配置、运维等可以看作中级篇,而RabbitMQ的原理及网络分区的介绍可以看作高级篇,所陈述的都是RabbitMQ在运行时使用到的一些本体知识。而本章内容作为一个拾遭扩展,主要介绍RabbiMQ的消息追踪和服务端入站连接的负裁均衡。
领取方式
这份经典的rabbitMQ学习宝典怎么领取呢?
1.请在评论区评论+点赞+转发
2.进入头条号主页面,右上角有私信功能,私信小编:笔记
同时希望大家多多转发分享给更多的朋友哦!
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)