RabbitMQ面试

1. 什么是RabbitMQ

RabbitMQ是使用Erlang语言开发的,基于AMQP高级消息队列的开源消息中间件

Erlang语言主要用于开发并发和分布式系统,在电信领域得到广泛应用

2.什么是消息中间件

消息中间件是在分布式系统中传递消息的软件服务。它允许不同的系统组件之间通过消息进行通信,而无需直接连接到彼此。消息中间件通常用于解耦系统的各个部分,提高系统的可扩展性、灵活性和可维护性。

2. 消息中间件解决了什么问题

2.1 异步处理

在业务没有上下文依赖的前提下,将串行的业务执行流程优化成并行的方式,从而减少服务响应的时间。
例如:在用户注册成功后,需要给用户发送短信和邮箱注册成功的通知,在此场景中,发送邮箱和短信通知不是必须要给客户端响应成功后通知,因此两者可以和注册的业务逻辑优化成并行。也就是在用户注册信息成功持久化到数据库后,直接给客户端响应注册成功,而邮箱和短信可以通过异步执行的方式,减少服务整体响应时间,减少用户的等待时长。

2.2 服务解耦

将耦合的接口,通过消息中间件解耦,减少一个接口定义发生变化,导致其他调用方都需要修改的情况。
例如:用户购买商品,调用下订单服务,再调用发货服务,如果发货服务需要进行升级,发货服务接口参数改变了,那么所有使用了发货接口的服务,全部需要配合修改参数;如果使用了消息中间件,将用户下单的信息发布到消息中间件中,发货接口只需要订阅消息中间件的订单消息,当有新的订单时,再发货,无论发货接口的参数定义如何变化,都不会影响上游的接口功能

2.2 流量削峰

将集中在某一段时间的流量,存储在一个池子里(消息中间件的队列中),然后根据服务器的消费能力进行处理,而不是在流量高峰期,将所有的流量全部处理完毕。
例如:秒杀活动,瞬间流量会非常大,如果服务器直接去处理这么大流量的请求,很容易导致整个应用崩溃;通过消息队列,将流量先暂存到队列中,然后有服务器慢慢的消化,通过拉长时间,减小服务器的压力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 | 如何使用 Seaborn 提升数据分析效率

Seaborn和Matplotlib都是Python可视化库,它们都可以用于创建各种类型的图表。但是,Seaborn 和Matplotlib在概念和设计上有一些不同。 Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂&am…

面试经典 150 题 ---- 移除元素

面试经典 150 题 ---- 移除元素 移除元素方法一:双指针方法二:双指针优化 移除元素 方法一:双指针 题目要求在原数组的基础进行元素的删除,所以输出的数组长度一定小于原数组的长度,因此可以使用双指针,r…

CMMI、SPCA、CSMM,三种认证的差异有哪些?

在当今的企业环境中,体系认证已经成为了一个重要的议题。其中,CMMI、SPCA和CSMM是三种广泛使用的认证,它们在各自领域内具有特定的目标和要求,今天擎标就带大家了解一下这三种认证之间的差异。 CMMI、CSMM和SPCA分别是什么 1、C…

htb Pov wp简记

最近懒得飞起 不想写太细,有师傅想看完整的可以留个言或者私信 我再补补… user部分 nmap只扫到一个端口 http/80 目录没扫出什么 vhost扫出dev来 在抓包访问页面邮箱丢出去的包有包含asp.net的viewstate,这里一开始我还没在意,后来发现有个…

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载: YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…

AGP更改gradle版本无效的解决方案

从Github下载了一个项目,非常激进,AGP版本8.4.0,而我的AS只支持到8.2.0 详见:https://developer.android.com/build/releases/gradle-plugin?buildsystemndk-build&hlzh-cn#android_gradle_plugin_and_android_studio_compa…

微服务架构实施攻略:如何选择合适的微服务数据管理策略?

随着业务的快速发展和系统的日益复杂,传统的单体应用逐渐显露出瓶颈,已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案,通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…

代码随想录算法训练营第十八天| 513.找树左下角的值 ● 112. 路径总和 ● 106.从中序与后序遍历序列构造二叉树

层序遍历、回溯、由两种遍历序列逆推二叉树 513.找树左下角的值 思路: 使用层序遍历,只需要记录最后一行第一个节点的数值就可以了。 特殊情况: 代码实现 class Solution { public:int findBottomLeftValue(TreeNode* root) {int val;//利用…

系统安全程序优化

我们为什么需要优化防火墙服务呢? 防火墙概念介绍: 防火墙作为本地计算机的一道防御,抵御着病毒、蠕虫、木马和强力的黑客攻击。 它既能以软件(安全程序)的形式出现,也可以采用硬件(物理路由…

【Javaweb程序设计】【C00163】基于SSM房屋中介服务平台(论文+PPT)

基于SSM房屋中介服务平台(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的房屋中介服务平台 本系统分为前台、管理员、用户3个功能模块。 前台:当游客打开系统的网址后,首先看到的就是首页界面。…

【极数系列】Flink集成DataSource读取集合数据(07)

文章目录 01 引言02 简介概述03 基于集合读取数据3.1 集合创建数据流3.2 迭代器创建数据流3.3 给定对象创建数据流3.4 迭代并行器创建数据流3.5 基于时间间隔创建数据流3.6 自定义数据流 04 源码实战demo4.1 pom.xml依赖4.2 创建集合数据流作业4.3 运行结果日志 01 引言 源码地…

C语言-指针的基本知识(下)

四、指针的分类 按指针指向的数据的类型来分 1:字符指针 字符型数据的地址 char *p;//定义了一个字符指针变量,只能存放字符型数据的地址编号 char ch; p &ch; 2:短整型指针 short int *p;//定义了一个短整型的指针变量p&#xff0c…

怎样做好Code Review

Code Review方案 定义 Code Review代码评审是指在软件开发过程中,通过对源代码进行系统性检查的过程。通常的目的是查找各种缺陷,包括代码缺陷、功能实现问题、编码合理性、性能优化等;保证软件总体质量和提高开发者自身水平 code review …

【机器学习】正则化

正则化是防止模型过拟合的方法,它通过对模型的权重进行约束来控制模型的复杂度。 正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了数据的噪声,一般不正则化b。 loss(y^,y):模型中所有参数的损失函数&…

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题,RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估,辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式

mkcert官方仓库地址:https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性,无需操作繁杂的 openssl 实现自签证书了&#xff…

docker笔记

容器技术 应用程序仅由较少数量的大组件构成时,可以给每个组件分配专用的虚拟机来隔离他们的环境。但是,组件更小,数量更多时,继续使用虚拟机来隔离得话,会浪费硬件资源,增加人力资源。 Linux容器技术隔离…

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类,通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis,在…

xcode安装visionOS Simulator模拟器报错解决方法手动安装方法

手动安装方法: 手动下载visionOS Simulator模拟器地址: https://developer.apple.com/download/all/ 选择 Xcode 版本 sudo xcode-select -s /Applications/Xcode.app # 用 Xcode-beta 的话是: # xcode-select -s /Applications/Xcode-beta…

openssl3.2 - 测试程序的学习

文章目录 openssl3.2 - 测试程序的学习概述笔记openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板openssl3.2 - 测试程序的学习 - test\aborttest.copenssl3.2 - 测试程序的学习 - test\sanitytest.copenssl3.2 - 测试程序的学习 - test\acvp_test.copenssl3.2 - 测…