聊个五毛钱的天(ActiveMQ)消息中间件-程序员宅基地

技术标签: [消息中间件]  

1 消息中间件介绍

1.1 什么是消息中间件

首先百度百科是这样解释的:

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

根据我的理解,其实消息中间件,简单的说就是——服务与服务之间的通讯工具;

打个简单比喻,现在互联网时代,我们人与人之间的通讯,用得最多的应该是微信吧;

场景模拟:

我:小明小明我找着女朋友了!!

小明:卧槽老哥赶紧通知家里

亲人群:啊哈哈哈,我有女朋友了;

。。。然后七大姑八大姨都知道了。这里的微信就充当了消息中间件这个角色;

1.2 为什么要用消息中间件

用消息中间件的主要目的是为了异步处理应用解耦;

1.2.1 异步处理

场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式

  1. 串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西;
  2. 并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间;

假设三个业务节点分别使用50ms,串行方式用时150ms,并行方式用时100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回;

 

上图采用传统的同步方式处理,性能很慢。

3.消息队列:

引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理

由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。

 1.2.2 应用解耦

这里举例场景:我们双11秒杀活动,用户下单假设需要经过订单服务和库存服务。传统做法是订单服务调用库存服务接口,但是这样做会存在一些问题。

如果库存服务出现故障,那么用户下单就会失败。这样直接导致大批用户无法下单完成交易,淘宝也会损失大笔交易金额。服务于服务直接存在耦合。

那么我们这里使用消息队列(中间件)会怎么样呢?

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

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

就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失

但是你有没有考虑另外一个问题,就是万一你依赖的那个MQ中间件突然挂掉了怎么办?这个还真的不是异想天开,MQ、Redis、MySQL这些组件都有可能会挂掉。一旦你的MQ挂了,就导致你的系统的核心业务流程中断了。本来你要是不引入MQ中间件,那其实就是一些系统之间的调用,但是现在你引入了MQ,就导致你多了一个依赖。一旦多了一个依赖,就会导致你的可用性降低。因此,一旦引入了MQ中间件,你就必须去考虑这个MQ是如何部署的,如何保证高可用性。甚至在复杂的高可用的场景下,你还要考虑如果MQ一旦挂了以后,你的系统有没有备用兜底的技术方案,可以保证系统继续运行下去。

博主还在学习,如果以后有技术方案会及时更新

1.2.3 流量削峰

顾名思义,当出现大流量的情况下舍弃掉一部分。一般秒杀等活动应用会出现这种情况。

当秒杀活动开始,其瞬间流量是非常大的,如果不去处理就会导致服务直接挂掉。所以为了解决我们在服务前端加入消息队列(中间件)。

这样我们可以起到以下作用:

  1. 控制整体活动人群数量,用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面;

  2. 可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单);

  3. 秒杀业务根据消息队列中的请求信息,再做后续处理;

 

后续慢慢补

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq493820798/article/details/102601519

智能推荐

Web服务_13817102185-程序员宅基地

文章浏览阅读962次。Web服务Web服务是基于XML格式的一种数据传输方式,既可以在内部使用,也可以通过互联网公开,供其他服务器的应用程序调用,不受操作系统和编程语言的约束。客户端调用远程服务时所传递的数据或对象,需要按照某种协议格式转换后再发送到网络上,这个过程称为串行化,反方向解构称为并行化。WSDL,Web Services Description Language,网络服务描述语言。告诉客_13817102185

虎牙直播在微服务改造方面的实践和总结-程序员宅基地

文章浏览阅读645次。戳蓝字“CSDN云计算”关注我们哦!作者 | 张波文章转载自阿里巴巴中间件相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导“以技术..._虎牙是web应用

毕设项目:监考安排与查询系统(JSP+java+springmvc+mysql+MyBatis)_监考排班系统源码-程序员宅基地

文章浏览阅读204次。该系统旨在通过自动化、智能化的方式,实现对考试过程中监考人员的排班、考务信息的发布以及考生成绩的查询等功能。同时,监考安排与查询系统的实施还有助于加强学校与社会的互动,提升教育管理水平。+ Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。用户发送请求:用户通过浏览器或其他客户端向系统发送请求,请求访问特定的页面或执行特定的操作。前端展示结果:前端接收到后端返回的数据,根据需要进行展示。后端程序接收到请求后,根据请求的类型和参数进行相应的处理。_监考排班系统源码

2024年最新Android面试精讲,附小技巧,快手android面试经验-程序员宅基地

文章浏览阅读254次,点赞3次,收藏3次。其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。Android学习PDF+学习视频+面试文档+知识点笔记【Android思维脑图(技能树)】知识不体系。

《书生·浦语大模型实战营》第四节课《XTuner 微调 LLM:1.8B、多模态、Agent》课程笔记-程序员宅基地

文章浏览阅读523次,点赞16次,收藏20次。2024年3月开始参加《书生·浦语大模型实战营》第一节课《书生·浦语大模型全链路开源体系》第二节课《轻松玩转书生·浦语大模型趣味 Demo》第三节课《茴香豆:搭建你的 RAG 智能助理》第五节课《LMDeploy 量化部署 LLM 实践》这是《书生·浦语大模型实战营》第四节课《XTuner 微调 LLM:1.8B、多模态、Agent》课程笔记想利用底座模型应用到自己的特定领域当中,应用到一个特定的下游任务当中,表现是不如针对领域内训练的模型,所以需要进行领域内微调。

Matlab仿真偶极子天线激励_天线matlab吸收边界条件-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏25次。%文件描述:三维偶极子源激励,PML吸收边界,采用矩阵赋值%激励描述:高斯脉冲%激励位置:空间中心位置%介质描述:自由空间clear all;close all;clc;%设置初始条件NSTEPS=80;%时间步IE=40;JE=40;KE=40;%仿真空间大小ic=IE/2;jc=JE/2;kc=KE/2;%观察点位置ra_y=1.0;ra_x=1.0;%方向比例系数nx..._天线matlab吸收边界条件

随便推点

java/jsp/ssm家装建材采购管理系统【2024年毕设】_数据库课设建材市场管理-程序员宅基地

文章浏览阅读51次。springboot基于SpringBoot的剧本杀管理系统。springboot基于大数据平台的个性化图书推荐系统。springboot基于Vue框架的社区疫情监控系统。springboot中心医院药品管理系统的设计与实现。springboot基于小程序的稀缺疫苗预约系统。springboot基于Java的网上购物系统。ssm基于Android的团购系统的设计与实现。springboot中国传统文化学习与交流系统。springboot校园防诈骗在线学习系统。springboot校园互助跑腿系统小程序。_数据库课设建材市场管理

TikTok商业模式的未来:AR技术、虚拟商品、社交电商等将成为新的增长点_tiktok社交电商趋势新功能-程序员宅基地

文章浏览阅读271次。TikTok作为全球最火爆的短视频社交平台之一,已经成为许多品牌推广和线上销售的重要渠道。随着技术的不断发展,TikTok商业模式也在不断创新。在这篇文章中,我们将探讨TikTok商业模式的未来,包括AR技术、虚拟商品、社交电商等将成为新的增长点。_tiktok社交电商趋势新功能

gbdt的参数意义与设置_gbdt训练精度主要跟什么参数有关-程序员宅基地

文章浏览阅读5.6k次。http://www.jianshu.com/p/005a4e6ac775重要参数的意义及设置推荐GBDT树的深度:6;(横向比较:DecisionTree/RandomForest需要把树的深度调到15或更高)  以下摘自知乎上的一个问答(详见参考文献8),问题和回复都很好的阐述了这个参数设置的数学原理。  【问】xgboost/gbdt在调参时为什么树的深度很少就能达到很高的_gbdt训练精度主要跟什么参数有关

为什么前端数值精度会丢失?(BigInt解决办法)_前端精度丢失问题-程序员宅基地

文章浏览阅读1.9k次。数值计算、保留指定小数位、接口返回数值过大等等,这些操作都有可能导致原本正常的数值在JavaScript中确表现得异常(即精度丢失)。使用整数进行计算(先放大再缩小)。在处理需要高精度计算的场景中,可以使用一些专门的库或工具。例如,JavaScript中的Decimal.js、Big.js或BigNumber.js等库提供了高精度的数学计算功能,可以避免精度丢失的问题。超过最值时,接口以字符串的形式返回对应的值。_前端精度丢失问题

python123程序设计方法学_嵩天老师Python123 测验8: 程序设计方法学 (第8周)-程序员宅基地

文章浏览阅读374次。文章目录单项选择题程序设计题英文字符的鲁棒输入数字的鲁棒输入单项选择题点击选项选择正确答案,每题有且仅有一个正确答案1.关于Python第三方库安装方法,以下选项描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬A. 使用pip命令B. 访问U..._嵩天第八周答案csdn

3 行代码写出 8 个接口,开挂了?网友:绝对不可能!!!-程序员宅基地

文章浏览阅读187次。点击上方“Java精选”,选择“设为星标”别问别人为什么,多问自己凭什么!下方留言必回,有问必答!每天08:35更新文章,每天进步一点点...肯定有不少人会想:这怎么可能呢?就算用几乎...