【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?

news2025/7/17 11:48:38

目录

一、什么是RabbitMQ?

二、RabbitMQ是干什么的?

三、RabbitMQ的常见作用有那些?

四、RabbitMQ的应用场景有那些?

场景一:用户订单,库存处理。【服务间解耦】

场景二:用户注册,发送手机短信,邮件。【实现异步通信】

场景三:商品秒杀和抢购。【流量削峰】


一、什么是RabbitMQ?

答:RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法,其服务器也是以高性能、健壮以及可伸缩性出名的Erlang语言编写而成。


二、RabbitMQ是干什么的?

答:RabbitMQ简单来说就是一个消息队列中间件,用来保存消息和传递消息的一个容器。在此过程中充当一个中间人的作用。

 而队列的主要目的就是提供正确的路由来保证消息的传递;如果发送消息时消费者不可用的话,默认情况下该消息将会一直被存储在队列中,直到消费者消费为止。

那么同时呢,如果设置了消息存活的时间,即消息的有效期。在此有效期间消息如果还没有被消费的话,那么该消息就会变成死信,由死信交换机接收。而绑定死信交换机的队列则称为死信队列。


三、RabbitMQ的常见作用有那些?

答:RabbitMQ的常见作用有三种,分别是服务间解耦、实现异步通信、流量削峰

主要实现了消费者和生产者之间的解耦,发送异步消息,高并发访问解决流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

常见的应用常见有:用户订单,库存处理;用户注册,发送手机短信邮件;商品秒杀和抢购等...


四、RabbitMQ的应用场景有那些?

场景一:用户订单,库存处理。【服务间解耦】

使用MQ前:系统正常时,用户下单,订单系统调用库存系统进行删减操作,操作成功,将成返回消息,提醒下单成功。系统异常时,库存系统将无法访问,导致订单删减操作无法执行,最终导致下单失败。

使用MQ后:订单系统和库存系统之间不在互相影响,独立运行,达到了应用解耦的目的。订单系统只需要将下单消息写入MQ,就可以直接执行下一步操作。这时即使库存系统出现异常也不会影响订单系统的操作,且下单的库存删减记录,将会被永久保存到MQ中,直到库存系统恢复正常,从MQ中订阅下单消息,进行消费成功为止。

使用MQ前:

 使用MQ后:

场景二:用户注册,发送手机短信,邮件。【实现异步通信】

使用MQ前:整个操作流程,全部在主线程完成。点击用户注册 --》 入库添加用户 --》发送邮件 --》发送短信。每一步都需要等待上一步完成后才能执行。且每一步操作的响应时间不固定,如果请求过多,会导致主线程请求耗时很长,响应慢,甚至会导致死机的情况出现,严重影响了用户的体验。

使用MQ后:主线程只需要处理耗时较低的入库操作,然后把需要处理的消息写进MQ消息队列中,然后由不同的独立的邮件系统和发短信系统,同时订阅消息队列中的消息进行消费。这样通过消息队列作为一个中间人去保存和传递消息,不仅仅耗时低消耗的资源也很少且单个服务器能够承受的并发请求将更多。

场景三:商品秒杀和抢购。【流量削峰】

流量削峰是消息队列中常用的场景 一般在秒杀或团购活动中使用广泛。

使用MQ前:对于秒杀、抢购活动,用户访问所产生的流量会很大,甚至会在同一时间段出现上万上亿条请求,这股瞬间的流量暴涨,我们的应用系统配置是无法承受的,会导致系统直接崩溃死机。

例如:A系统平时每秒请求100个,系统稳定运行; 但是晚上8点有秒杀活动 ,每秒并发增至1万条 ,系统最大处理每秒1000条 于是导致系统崩溃。 

使用MQ后:我们在大量用户进行秒杀请求时,将那个巨大的流量请求拒在系统业务处理的上层,并将其转移至MQ中,而不是直接涌入我们的接口。在这里MQ消息队列起到了缓存作用。

例如:100万用户在高峰期,每秒请求5000个,将这5000个请求写入MQ系统每秒只能处理2000请求,因为MySQL只能处理2000个请求 ; 系统每秒拉取2000个请求 不超过自己的处理能力即可。

使用MQ前:

使用MQ后:


 写到最后

四季轮换,已经数不清凋零了多少, 愿我们往后能向心而行,一路招摇胜!

🐋 你的支持认可是我创作的动力

💟 创作不易,不妨点赞💚评论❤️收藏💙一下

😘 感谢大佬们的支持,欢迎各位前来不吝赐教

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

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

相关文章

javaScript实现倒计时功能

目录 一、主要思路 二、css样式 三、html代码 四、js内容 五、完整代码展示 六、效果展示 一、主要思路 1.通过内置时间函数实例化日期对象获取当前时间 new Date。 2.因为时间无法减去时间,有可能生成负数,所以采用时间戳的方法得到毫秒数形式的…

(完整版)2022大厂Java八股文面试题库|附答案

Java基础 说下面向对象四大特性Java语言有些特点什么是Java程序的主类?应用程序和小程序的主类有何不同?访问修饰符public,private,protected,以及不写(默认)时的区别?float f3.4;是否正确?Java有没有goto…

Spring Boot(四):Spring Boot启动原理分析

文章目录 Spring Boot启动原理分析 一、依赖导入原理 二、Spring Boot包扫描原理 三、Spring Boot自动配置原理 Spring Boot启动原理分析 一、依赖导入原理 父项目版本控制 ctrl 点击spring-boot-starter-parent进入 继续点击,进入spring-boot-dependencies…

微前端-qiankun

概念 使用框架:qiankun 介绍: qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun官网:Go 当使用 iframe 整合系统时,假设我们有系统 A, 当我们…

MySQL+Navicat安装配置教程(超级详细、保姆级)

MySQLNavicat安装配置教程(超级详细、保姆级)一、 下载MySQL1. 选择想要安装的版本,点击Download下载二、安装MySQL1. 选择设置类型2. 选择安装的产品和功能3. 先选中“MySQL Server 5.7.31” ,之后点击下方的蓝色“Advanced Opti…

Crontab表达式执行定时任务

Cron是一个Linux下的定时执行工具,可用于执行定时任务。 启动、关闭、查看Cron服务的语法: 启动:/sbin/service crond start 查看:/sbin/service crond status 停止:/sbin/service crond stop 重启:/sbin…

微信小程序 h5页面跳转小程序(超详细讲解)

h5跳转小程序 实战项目从无到完整的h5跳转小程序经验,跳转方式分为云函数跳转和开放性标签跳转。 开放性标签是针对微信里面浏览器使用的,而云函数跳转在外部以及微信里面都可以使用。 建议需要的同学先全部浏览一遍本文。内容较长较为啰嗦。 一、不…

jQuery 获取与设置 元素属性【一篇文章轻松拿下】

hello大家好呀!此篇文章带领大家熟练掌握 jQuery 的属性方面的操作,包括固有属性的获取与设置,自定义属性的获取与设置等等,走进 jQuery 的更深层次阶段 文章目录: 一:固有属性的设置与获取 prop 1.1 固有…

uniapp 中设置全局页面背景色

uniapp 中设置全局页面背景色 提示:以下是本篇文章正文内容,下面案例可供参考 未生效 : 在pages.json里面设置单页面背景色,这种是不行的,只能在页面内生效 方法1: pages.json globalStyle 中设置 backgroundColor // pages.json"globalStyle&quo…

Vue路由传参的方法和传递参数为对象时的问题

vue路由传参方法 在编写vue项目时,时常会使用路由在不同页面中传递参数,常见使用方式如下: this.$router.push({path: "/test",query: {a: 1,b: 2} }) 这样我们就传递了两个参数,在 /test 页面 就可以接收这两个参数…

【网络】https协议

🥁作者: 华丞臧. 📕​​​​专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…

黑马程序员最新版JavaWeb综合案例(前后端完整版)

JavaWeb 综合案例 学习视频链接: 黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版 完整代码链接: https://github.com/HaiLei-Fly/JavaWeb-brand 1、功能介绍 案例功能: 用户登录(账号密码登录)…

基于JavaSpringBoot+Vue+uniapp微信小程序实现在线房屋装修管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

分布式Id生成方式

为什么要用分布式ID? 在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征? 1、什么是分布式ID? 拿MySQL数据库举个栗子: 在我们业务数据量不大的时候&#xff0c…

Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)

目录前言插件安装方法插件一:文献翻译插件(pdf-translate)插件二:文献附件管理(ZotFile)插件三:中文文献插件(茉莉花)插件四:Sci-Hub 自动下载文献&#xff0…

vue3项目实战中的接口调用方法(一)async/await用法 对axios二次封装 实现异步请求

vue3 async和await联合调用接口 🔥一文搞定🔥点击进入vue专栏🔥async/await定义async/await用法🔥async/await的基本用法async/await的使用场景async/await实战🔥🔥处理一个异步请求处理多个异步请求summar…

从函数计算到 Serverless 架构

作者:秋雨陈 前言 随着 Serverless 架构不断发展,各云厂商和开源社区都已经布局 Serverless 领域,一方面表现在云厂商推出传统服务/业务的 Serverless 化版本,或者 Serverless 计算平台;另一方面表现在开源社区中 Se…

远程构建(命令、脚本构建)jenkins

在对应项目,开启远程构建开关添加API token系统设置调整用户权限获取crumbcurl调用构建 1、进入对应项目的设置页面:开启远程构建开关 2、 添加 API token:进入对应用户的设置页面 3、系统设置调整权限,如图 4、由于jenkins的安全…

使用element-ui中的el-upload自定义上传

题引: 日常开发系统的时候,我们都会有上传文件的功能。但是用原生的文件上传是很繁琐的,那么我们都会选择使用UI组件库,如element-plus、ant-design等。这些UI组件库是非常容易上手且实用的,但是万恶的需求是奇怪多变…

vue项目引入百度地图BMapGL和BMap实例,以及辅助工具BMapGLLib 的引入,BMapGL鼠标绘制功能

记录一下vue项目使用百度地图所用的api和踩过的坑,减少以后引用少走弯路。旨在记录,第一次开贴,不足之处请多多指教。废话不多说,开撸! 1、引用百度地图 这里账号密钥不多说,上链接,自己注册。…