消息队列MQ

一、消息队列

        网络端的Http请求默认采用的是同步请求方式,客户端与服务器端是基于请求和响应模式进行通信的。也就意味着,客户端发起请求。必须要等待服务器端完成处理结果给客户端才能继续进行下一步操作,如果服务器发送网络延迟、宕机、卡顿那么客户端势必会受到影响。

        基于这个问题下,MQ应运而生。MessageQueue消息队列,是一个按照先进先出队列设计的容器,主要用于对系统中产生的消息进行存储和消费。使用消息队列主要为了通过异步处理提高系统性能和降低峰值、降低系统耦合度等目的。主流的消息队列有:ActiveMQ、RabbitMQ、Kafka、RocketMQ。

        消息队列的本质其实就是生产-消费模型。系统运行过程中,按照不同的应用场景,不断地产生消息并发送至消息队列;当需要使用消息时,则按照先进先出的方式取出队列中的消息,进而消费消息。

 二、消息中间件的应用场景

        1.异步处理

        实际应用:短信通知、终端状态推送、App推送、用户注册等。

        设想一下当前场景:用户完成注册后,要实现发送注册邮件及注册短信功能。

        (1)串行方式:

        

                客户端发起请求,注册信息写入数据库后,先实现发送注册邮件,再发送注册短信耗时150毫秒。

        (2)并行方式:

        

                客户端发起请求,注册信息写入数据库后,同时执行发送注册邮件和短信耗时100毫秒。

        (3)如果引入消息中间件,即为

        

                将想要发送的消息写入消息队列,再由消息队列异步读取消费消息,这个过程耗时55毫秒,几乎等同于注册信息写入数据库,极大的提高了系统吞吐量。

        2.流量控制

        我们经常可以见到的例子,在某些直播间或者节日活动去秒杀某类热销商品时,如果说请求超过了一定的上限很容易造成服务器瘫痪的情况,这就造成了一定成度的麻烦。利用消息队列可以有效的阻隔相应的请求从而减少服务器的压力。

        

        在通过网关服务将请求转发到后端服务时,通过消息队列隔离网关和后端服务,来达到流量控制和保护后端服务的目的。设置消息队列的最大限制数,在达到最大数量时网关不再生产消息到消息队列中,例如:秒杀活动下,商品数量为100即消息队列的上限,超过100时下一个用户请求直接返回秒杀失败。

        3.服务解耦

        微服务架构服务与服务之间的通信是面向接口编程,如果引入消息队列,消息存储于消息队列中,当前服务有需要则从MQ获取消息消费即可,不需要也可以不消费。

        

        4.发布订阅

        用户想要获取消息队列中的消息,必须先注册订阅该消息。

        

        5.高并发缓冲

        系统在某个时间点的访问量巨大,依然超出了后端接口的每秒最大处理能力,这就导致服务器过载,响应延迟甚至于服务器宕机。

        针对这样场景吗,可以利用消息队列将临时数据写入消息队列,由消息队列临时缓存至磁盘,降低高峰数据对后端的短暂冲击。

 三、常见消息中间件

常见消息队列
特性MQActiveMQRabbitMQRocketMQKafka
是否支持生产者消费模式
是否支持发布订阅模式
是否支持请求回应模式××
Api完整性

是否支持多语言

Java

单机吞吐量万级万级万级十万级
消息延迟微妙级毫秒级毫秒级
可用性高(主从)高(主从)非常高(分布式)非常高(分布式)
消息丢失几乎不几乎不
文档的完备性较高
提供快速入门
社区活跃度
商业支持××商业云商业云

        以上就是对消息队列的初步认识喽。

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

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

相关文章

Redis哨兵集群的介绍及搭建

Redis 是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。然而,作为一个单点服务,Redis 在面临硬件故障或者网络问题时可能会导致服务不可用。为了解决这个问题,Redis 提供了哨兵模式,一个…

jmeter采集ELK平台海量业务日志( 采用Scroll)

由于性能测试需要,需采集某业务系统海量日志(百万以上)来使用,做稳定性压测使用。但Elasticsearch的结果分页size单次最大为10000(运维同事为保证ES安全)。为了能够快速采集ELK平台业务日志,可以…

Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)

多实例联动 一、Tomcat 多实例1.1 什么是Tomcat多实例?1.2 配置思路1.3 配置实现1.3.1 安装jdk1.3.2 安装tomcat1.3.3 配置 tomcat 环境变量1.3.4 修改端口号1.3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量1.3.6 启…

Java实现合并多个excel操作

涉及较多封装的工具类,所有依赖的工具类均提供代码,根据名称新建对应的类,在每个工具类中再引入相应的依赖即可 首先需要明确的是,需要合并的每个excel的表头名称必须是相同的, 针对表头,建立传输的dto&a…

可视化大屏设计模板 | 主题皮肤(报表UI设计)

下载使用可视化大屏设计模板,减少重复性操作,提高报表制作效率的同时也确保了报表风格一致,凸显关键数据信息。 软件:奥威BI系统,又称奥威BI数据可视化工具 所属功能板块:主题皮肤上传下载(数…

Vue-video-player下载失败(npm i 报错)

Vue-video-player下载失败 最近在做项目时涉及到视频的播放组件,看了一下选择了Vue-video-player这个工具,实际在操作中是遇到许多问题的。 Q1:不支持谷歌 对于 “vue-video-player” 使用时出现 Adobe Flash 不再支持的提示,这是因为 Ado…

2023/09/12 qtc++

实现一个图形类(Shape) ,包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle) ,继承自图形类,包含私有属性:半径 公共成员函数:特殊成员函数…

华为云云耀云服务器L实例评测 | 开启OPC UA之旅

OPC Unified Architecture (OPC UA)是一种用于工业自动化的M2M协议(Machine-to-machine),具有平台独立性,在Windows和Linux上都可以运行。随着云服务在工业现场的不断普及,OPCUA服务也开始大量部署在云端。 本文以华为云云耀云服务器L为基础…

MySQL内连接和外连接及七种SQL JOINS的实现

1. 内连接 2.外连接左外连接:右外连接:满外连接: 3. SQL99语法实现多表查询 3.1 SQL99实现内连接 3.2 SQL99语法实现外连接 3.2.1 左外连接3.2.2 右外连接 3.2.3 满外连接 4.总结:七种SQL JOINS的实现 4.1 内连接 4.2 左…

学习Bootstrap 5的第十三天

目录 提示框 如何创建提示框 实例 指定提示框的位置 实例 弹出框 如何创建弹出框 实例 指定弹出框的位置 实例 关闭弹出框 实例 提示框 提示框是一个小小的弹窗,在鼠标移动到元素上显示,鼠标移到元素外就消失。 如何创建提示框 Bootstrap…

大数据课程K22——Spark的SparkSQL的API调用

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的通过api使用SparkSQL; 一、通过api使用SparkSQL 1. 实现步骤 1. 打开scala IDE开发环境,创建一个scala工程。 2. 导入spark相关依赖jar包。 3. 创建包路径以object类。 4.…

Java复习-多线程编程

多线程编程 解决并发访问的问题。 一. 继承 Thread 类实现多线程 1. 继承实现 继承thread类 class MyThread extends Thread{}覆写run主方法 多线程要执行的功能都应该在 run() 方法中定义。 class MyThread extends Thread { // 线程的主体类private String title;public…

100道基于Android毕业设计的选题题目,持续更新

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 大家好,我是程序员徐师兄、今天给大家谈谈基于android的app开发毕设题目,以及基于an…

30岁游戏服务端开发者的独立游戏梦想,你不敢想的事他都做了!

小的时候家里就是开电动游戏厅的,所以我从小就喜欢玩游戏,尤其是那些有创意和故事性的游戏。 我梦想着有一天能够制作出自己的游戏,让更多的人享受到游戏带来的乐趣。 为了实现这个梦想,我选择了学习计算机科学,并在毕…

数字化新零售营销模式如何落地?数字化新零售营销功能推荐

​通过科技手段,针对对线下零售店面的客户进行消费行为、频次等的分析,并进一步整合线上线下资源,实现实体零售的效率充分化,便是目前很火的新零售营销模式,能够将实体门店与数字化技术进行有机结合,通过为…

windows安装pytorch

windows安装pytorch 1. 安装cuda pytorch官网我要安装1.12.1对应的cuda有三个版本,我选了11.6 去官网安装这个版本的cuda下载链接 安装后打开命令行输入nvcc -V,可以显示版本则安装成功,如果显示nvcc不是外部命令,进入安装文件…

【个人博客系统网站】我的博客列表页 · 增删改我的博文 · 退出登录 · 博客详情页 · 多线程应用

【JavaEE】进阶 个人博客系统(4) 文章目录 【JavaEE】进阶 个人博客系统(4)1. 增加博文1.1 预期效果1.1 约定前后端交互接口1.2 后端代码1.3 前端代码1.4 测试 2. 我的博客列表页2.1 期待效果2.2 显示用户信息以及博客信息2.2.1…

springboot使用freemarker导出word

springboot使用freemarker导出word 一、需求说明二、制作模板文件1.修改word留下占位符并另存为.xml文件2.将xml文件后缀名改为.ftl3.打开ftl文件格式化内容4.将占位符替换成变量 三、代码实现1.引入依赖2.将模板引入resource下3.编写word导出工具包4.创建接口调用 一、需求说明…

CSS核心使用一

CSS核心使用一 box-sizingbox-shdowtext-shadowpositionwriting-mode box-sizing 定义计算一个元素的总高度和总宽度. 属性值 content-box 默认值,width 内容宽度,height内容的高度border-box 宽度和高度包含内容,内边距和边框 widthborderpadding内容宽度, heightborderpad…

使用亚马逊云科技人工智能内容审核服务,打造安全的图像生成和扩散模型

生成式人工智能技术发展日新月异,现在已经能够根据文本输入生成文本和图像。Stable Diffusion 是一种文本转图像模型,可让您创建栩栩如生的图像应用。您可以通过 Amazon SageMaker JumpStart,使用 Stable Diffusion 模型轻松地从文本生成图像…