为什么使用消息中间件

news2025/1/12 18:40:23

为什么要使用消息中间件

如有一个电商交易的场景,用户下单之后调用库存系统减库存,然后调用物流系统进行发货,如果刚开始交易,库存,物流都是属于一个系统,那么他们之间就是接口调用。但是随着系统的发展,各个模块业务越来越庞大、业务逻辑越来越复杂,这个时候就必然要做服务化和业务拆分。这个时候就需要考虑这些系统之间是如何交互的。首先想到的就是RPC(Remote Procedure Call),但是随着系统的发展,可能一笔交易后序需要调用几十个接口位于不同系统的接口,比如短信服务、邮件服务等等,这个时候就需要消息中间件来解决问题了。

消息中间件最突出的特点就是提供数据传输的可靠性和高效性,主要解决分布式的系统数据传输需求

消息队列的应用场景

消息中间件主要解决分布式系统数据传输的需求,同时提供数据传输的可靠性和高效性。

低耦合

低耦合:消息中间件在处理过程中插入了一个接口层,两边的处理过程都实现这接口,这允许你独立的扩展或是修改两边的处理过程,只要确保他们遵守同样的接口约束。

应用场景

用户下单后,订单系统需要通知库存系统。通常的做法是订单系统调用库存系统的接口。

缺点:1.加入库存系统无法访问,则订单减库存将失败,从而导致订单失败。

2.库存系统更改了减库存的接口(例如修改了入参),订单系统需要进行相应的改变,订单系统会被影响。

引入消息队列之后:

订单系统,用户下单之后,订单系统完成持久化处理,并将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,获取下单信息,进行库存操作。

如果在下单时库存系统不能正常使用。也不影响下单,因为下单之后订单系统写入消息队列之后不用关系其他操作,库存系统系统恢复之后,获取消息队列中的消息,进行减库存的操作。并且单独修改库存系统并不会影响到订单系统。

 异步通信

异步通信:在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步处理机制,允许应用把一些消息放入消息中间中,但并不立即处理它,之后需要的时候再慢慢处理。

应用场景

用户注册以后,需要发送注册邮件和注册短信,传统的方式有两种串行处理和并行处理。

串行处理:进注册信息写入数据库成功之后,发送注册短信再发送注册短信,三个任务完成之后返回客户端。假设每个业务节点使用50毫秒,不考虑网络等其他开销,总共花费150ms时间

并行处理:将注册信息写入数据库成功之后,发送注册短信的同时发送注册邮件,三个任务完成之后返回给客户端。假设每个业务节点使用50ms,不考虑网络等开销,并行的时间为100ms。

虽然并行处理可以提高效率,但是由于发送短信和发送邮件对于我们正常使用应用来说是没有影响的,所以客户端不需要当它发送短信和邮件完成之后才提示用户注册成功,当成功写入数据库时,就可以返回了。

 引入消息队列之后:将不是必须的业务逻辑(发送注册短信和注册邮件),进行异步处理。用户的响应时间=写入数据库时间+写入消息队列时间(可以忽略不计)

 缓冲能力和流量削峰

缓冲能力和流量削峰:消息中间件通过一个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速。该缓冲层有助于控制和优化数据流过系统的速度。使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩溃。

应用场景:

流量削峰一般在秒杀活动或团抢购活动中使用广泛,在秒杀活动中,一般会因为流量暴增,导致应用挂掉。为了解决这个问题一般在应用前端加入消息队列,可以控制活动的人数,可以缓解短时间内高流量。

传统模式:在下单的时候就往数据库中写入数据,但是如果并发量过高,可能就会宕机。

引入消息队列之后

消息被写入消息队列之后,系统可以根据自己的消费能力来消费,比如每秒2000个数据写入数据库。

如果加入消息队列长度超过最大数量,则可以直接抛弃用户请求或挑战到错误页面。

参考博文:消息中间件概述https://zengyihong.blog.csdn.net/article/details/127019856什么是消息中间件https://blog.csdn.net/weixin_43561060/article/details/118195543

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

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

相关文章

FRP 内网穿透搭建(无域名)

一、为什么要内网穿透 FRP 可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。 使用场景:公网服务器监听某个端口等待内网服务器连接,内网服务器连接成功后,用户访问公网的某一个端口,访问的所…

Domino Web应用早就想到了环保

大家好,才是真的好。 前几周我们讲了Notes,上周讲了点管理,这周我们可以讲点开发。 我现在要讲的技术真的很古老,但现在却被越来越多的人提倡。 传统的Notes应用可以很简单地通过浏览器访问,以一个非常简单但又很使…

ESP32设备驱动-MCP9808数字温度传感器驱动

MCP9808数字温度传感器驱动 文章目录 MCP9808数字温度传感器驱动1、MCP9808介绍2、硬件准备3、软件准备4、驱动实现1、MCP9808介绍 MCP9808 数字温度传感器将 -20C 和 +100C 之间的温度转换为精度为 0.5C(最大值)的数字字。 MCP9808 带有用户可编程寄存器,可为温度传感应用…

联力L216装机心得

联力L216装机心得 2022年12月份装机笔记 参考视频 B站硬件茶谈装机:https://www.bilibili.com/video/BV1BG4y137mG/?spm_id_from333.337.search-card.all.click&vd_source8f7bdd23b317e50e9b9803f44de6a213 联力L216机箱介绍:https://www.bilibili.com/vid…

ArcGIS基础实验操作100例--实验57由点坐标生成面要素

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验57 由点坐标生成面要素 目录 一、实验背景 二、实验数据 三、实验步骤 (…

【Qt】自动查找Qt应用程序缺少的依赖库

【Qt】自动查找Qt应用程序缺少的依赖库1、背景2、实例3、验证1、背景 操作系统:windows10专业版,如下图: Qt版本:qt-opensource-windows-x86-msvc2013_64-5.7.1.exe 使用Qt安装后的qtcreator5.7.1开发Qt应用程序。 将编译生成的…

基于Vue和SpringBoot的超市账单管理系统的设计和实现

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

【练习】Day03(未完成版)

努力经营当下,直至未来明朗! 文章目录一、选择二、编程1. 括号生成2. 颜色分类答案1. 选择2. 编程提普通小孩也要热爱生活! 一、选择 下列Java代码中的变量a、b、c分别在内存的____存储区存放。 class A {private String a “aa”;public…

SpringBoot+JPA(官方案例)

在线文档项目结构 1.源码克隆:git clone https://github.com/spring-guides/gs-accessing-data-jpa.git 2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目 3.功能描述:构建应用程序,使…

相机标定中的战斗机--张氏标定法

张正友标定法--相机标定中的灭霸!在上学期接触过calibration以后,下定决心要学一下张正友标定法的,然后没来的及学,寒假弥补一下。参考博客:https://zhuanlan.zhihu.com/p/136827980编辑切换为居中添加图片注释&#x…

车牌识别数据收集之自动化筛选工具

综述 最近在进行车牌识别的开发,在数据收集阶段除了那些特定的数据集(开源数据集),还需要自己收集一些数据,这些数据主要来自如爬虫、行车记录视频、非特定数据集,而在这些数据集中,只有少量的…

PCB结构和谐振(二)

PCB结构和谐振(一)实验研究在此章节中,我们通过不同的测试研究了旋转角度/复杂层叠/走线pitch和layout设计等,所有的测试都是基于Intel Delta L 4.0规范。旋转角度单层结构是一个简单的层叠,所以首先通过测试单层结构研…

成都远石无人机航测服务内容

成都远石无人机航测服务致力于为客户提供DEM、DSM、DOM、三维实景模型和机载激光雷达等数据成果,获得的数据成果在各个行业得到了应用和认可。相信大家对于DEM、DSM和DOM这些名词并不陌生,但对其内涵和差别却又比较模糊,接下来就讲一下这些数…

Android:OKhttp拦截器整理笔记

目录 正文 拦截器的自我实现 RetryAndFollowUpInterceptor BridgeInterceptor CacheInterceptor ConnectInterceptor CallServerInterceptor 运行一下 题外话 OkHttp是一个高效的HTTP库: 支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过…

Referer与XMLHttpRequest整理

Apache日志分割 1.原因 1.随着网络的访问量的增加,默认情况下Apache的单个日志文件也会越来越大。 2.日志文件占用磁盘空间很大 3.查看相关信息不方便2.对日志文件进行分割 1.Apache自带rotatelogs分割工具实现 2.第三方工具cronolog 分割3.配置日志分割(我用的p…

基于springboot+mybatis-plus+mysql+python+tensorflow2.0波导识别管理系统

基于springbootmybatis-plusmysqlpythontensorflow2.0波导识别管理系统一、系统介绍二、功能展示1.图片上传2.波导识别三、代码展示四、其它系统五、获取源码一、系统介绍 技术框架: 前端:vue 后端:springboot 算法:pythontensor…

用八叉树优化RayCasting

在之前的文章中,我们不得不等待 8 分钟来渲染一盏精灵灯和一个球体。 总而言之,我们询问每个像素是否有多个三角形之一相交。 这个场景包括: 4 个物体:1 个灯、2 个球体和 1 个平面34,378 个三角形:1 个球体没有三角形…

某音漂亮小姐姐视频合集一键下载,想看就看!

大家好,我是派森酱! 最近工作压力大,每天晚上回来基本洗洗就要睡了。但是总觉得一天就这么过去,有点遗憾,所以每天睡前躺床上刷刷抖音,看看美丽小姐姐,心情就会舒畅许多! 有些小姐姐…

架构师成长日记 - 01 4+1视图模型

文章目录 什么是软件架构什么是架构师?架构师的主要能力4+1视图模型逻辑视图(Logical View)开发视图(Development View)物理视图(Physical View)过程视图(Process View)场景视图(scenarios)软件建模语言什么是软件架构 软件架构是有关软件整体结构与组件的抽象描述,用于指导大…

StarkWare的Recursive STARKs

1. 引言 StarkWare的Recursive STARKs 为首个在以太坊主网上线的,针对通用计算的recursive stark proof方案: 递归证明目前已在以太坊主网上线: 扩容StarkEx app扩容StarkNet用于StarkWare的SaaS scaling engine用于permissionless rollup …