【退役之重学Java】为什么要使用消息队列

先来一个目前我能想到的回答

  1. 为了满足高并发的需求
  2. 消息队列的使用场景
    • 高并发 ,延时消息
  3. 消息队列的优点
    • 使用消息队列,能够将客户端发送的大量请求都放到消息队列中,而不用立即就去处理
    • 这样使得服务器能够按照自己的节奏,去处理请求
    • 服务器就不会因为突然的大量的请求,而宕机
    • 确保了系统的安全性和稳定性
    • 使用消息队列还可以完成某些特定的功能
    • 比如,使用死信和交换机,完成延时队列
    • 总的来说,消息队列能够极大保证系统的稳定性,安全性,可用性,同时能够完成延时队列。

行,来学学怎么回答这个问题

一、为什么要使用消息队列

  • 使用场景(有很多场景,选取三个核心场景)

    1. 解耦
      现场画个图来说明一下,A 系统发送个数据到BCD 三个系统,调用接口发送,如果E 系统也要这个数据呢?如果C 系统现在不需要了呢?现在 A 系统又要发送第二种数据呢? A 系统负责人处理起来就非常繁琐。还有更麻烦呢,A 系统要时时刻刻考虑 BCDE 四个系统如果挂了的话怎么办?……
    2. 异步
      现场画个图说明一下,A 系统要接受一个请求,需要再自己本地写库,还要在BCD
      三个系统写库,自己本地写库需要3ms,BCD三个库跟别要写300ms,400ms,500ms。最终请求总延时为四者相加。用户感觉到系统非常迟缓,用户体验感非常差。
    3. 削峰
      每天0点到11点,A系统风平浪静,每秒并发请求数量就100个,结果每次一到11点到1点,每秒并发请求数量暴增到1万条。但是系统最大的处理能力就只有1000,系统承受不了,崩了
  • 消息队列的优点

    1. 解耦
      通过消息队列的发布订阅模式,就可以达到异步化解耦的目的
    2. 异步
      这不还是通过消息队列,还完成异步操作嘛,发布者发布消息之后,就直接返回请求了,而不继续等待消息的消费者
    3. 削峰
      把发过来的请求先放在MQ中,系统每一次按量从MQ中获取请求,进行处理
      问题:会出现消息积压

二、消息队列的缺点

  1. 系统可用性降低: 系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人家ABCD四个系统好好的,没啥问题,你偏加个MQ进来,万一MQ挂了咋整?系统就崩溃了。
  2. 系统复杂性提高: 硬生生加个MQ,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?
  3. 导致一致性问题: A系统处理完了直接返回成功,客户都以为你这个请求成功了,但是如果任意一个消费者失败了,这数据就不一致了

所以,消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种的技术方案和架构来规避掉。最后,你会发现,系统复杂度提升了一个数量级,但关键时刻,还是得用

三、kafka,activemq,rabbitmq,rocketmq 都有什么优缺点

  • 阿巴阿巴阿巴……反正我只用 rabbitmq
  • 总的来说,RabbitMQ 在可靠性、灵活性、性能和扩展性等方面具有优势,适用于各种不同规模和复杂度的消息传递场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javaWeb快速部署到tomcat阿里云服务器

目录 准备 关闭防火墙 配置阿里云安全组 点击控制台 点击导航栏按钮 点击云服务器ECS 点击安全组 点击管理规则 点击手动添加 设置完成 配置web服务 使用yum安装heepd服务 启动httpd服务 查看信息 部署java通过Maven打包好的war包项目 Maven打包项目 上传项目 …

深度学习笔记001

目录 一、批量规范化 二、残差网络ResNet 三、稠密连接网络(DenseNet) 四、循环神经网络 五、信息论 六、梯度截断 本篇blog仅仅是本人在学习《动手学深度学习 Pytorch版》一书中做的一些笔记,感兴趣的读者可以去官网http://zh.gluon.a…

Abp框架,EF 生成迁移文件时,自动添加表和字段注释内容

在使用 abp 框架,或者ef 的时候都会遇到一个问题,就是建实体后要将实体描述生成到数据库中,就需要手动去添加 [Comment("注释内容")] 注解,这样相当于手动写两次注释(即使你是 Ctrl C)&#x…

若依集成mybatis-plus 超详细教程(亲测可用)

文章目录 简介步骤第一步第二步第三步第四步第五步第六步 使用QueryWrapperservice层impl 实现接口类层Mapper层 简介 话不多说 直接跟着下面的教程操作,如果有报错私信我,或者通过博文下面的微信名片加我微信,免费解答哦! 步骤 …

解决方案:‘Series‘ object has no attribute ‘xxxx‘

文章目录 一、现象二、解决方案 一、现象 ...... model.fit(X_train, y_train) y_pred model.predict(X_test) recall recall_score(y_test, y_pred) precision precision_score(y_test. y_pred) ......执行语句到**“precision precision_score(y_test. y_pred)”**这里发…

StarRocks 跨集群数据迁移,SDM 帮你一键搞定!

作者:严祥光,StarRocks Active Contributor,StarRocks 存算分离核心研发,在社区中主要负责数据导入、跨集群同步、数据迁移和容灾等工作。 有时候,你可能会为以下需求而苦恼,苦苦搜索更好的解决方案&#x…

记录创建项目java version 没有8的问题

问题: 解决方案 java版本选择21(21可以兼容jdk8) SpringBoot选择3.2.5 进入项目后手动在pom.xml中修改版本

基于stm32的spi从机实验HAL库编程

目录 基于stm32的spi从机实验HAL库编程前言业务场景硬件设计接线配置swd接口配置spi配置DMA配置中断配置系统时钟配置工程生成代码写点从机代码上机现象后记本文使用的测试工程 基于stm32的spi从机实验HAL库编程 前言 在微控制器的世界中,串行外设接口(SPI)是一种…

java面向对象实现文字格斗游戏细节完善版

为了完善上一篇的文字格斗游戏的细节,所以加了些代码,使得交互更加的具体有趣! 效果 大家可以多运行几次代码,得到不同的战况!! 代码实现 1.bean类 import java.util.Random;public class TextGame {private Strin…

ardupilot的固定翼飞行模式

飞行模式 APM所有的飞行模式都在对应的机型的文件夹下的mode.h里面有定义,针对于不同的模型,功能函数在基类中Mode中都是以纯虚函数实现了, 然后在继承的子类中重新实现它,以实现多态。 takeoff模式 参见网址在 ArduPlane 4.0 及更高版本中,自动起飞本身也是一种模式(…

文件操作

前言: 文件内容属性 要向访问文件就要打开文件——>用进程来打开——>要把文件先加载到内存中——> 一个进程可以打开多个文件,OS中也有可能多个进程打开了多个文件 文件以多,就需要进行管理,——先描述再组织 没有被打开…

【图文教程】PyCharm安装配置PyQt5+QtDesigner+PyUic+PyRcc

这里写目录标题 PyQt5、Qt Designer、PyUic、PyRcc简介(1)下载安装PyQt5(2)打开designer.exe所在位置(3)在PyCharm中配置QtDesigner(4)验证QtDesigner是否配置成功(5&…

thinkphp6使用layui分页组件做分页效果

博主用的是layui2.9.8的版本,但这个版本的分页组件是动态效果的,但我需要的是静态分页,所以我自己封装了一个生成layui的分页代码生成代码。代码如下: 1、先创建文件,路径是extent/layui/LayuiPage.php,加…

HashMap前世今生

概述 HashMap是我们常用的一种数据结构,他是一个key-value结构。我们来深入了解一下。 1.8之前用的数组加链表 1.8之后用的数组加链表加红黑树,当链表数量大于8时,将链表转为红黑树。当红黑书节点小于6又会转为链表。 浅析HashMap的put()方…

达梦数据库限制用户登录IP测试

达梦数据库创建用户时可以限制登录ip和时间段。 创建测试测试用户 create user test1 identified by Test_1234 ALLOW_IP "192.168.100.101"; 限定该用户只能通过192.168.100.101地址登录数据库 连接测试 上图可见,192.168.100.101客户端可以连接上19…

纯血鸿蒙APP实战开发——Grid和List内拖拽交换子组件位置

Grid和List内拖拽交换子组件位置 介绍 本示例分别通过onItemDrop()和onDrop()回调,实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明: 拖拽Grid中子组件,到目标Grid子组件位置,进行两者位置互换。拖拽List中子…

搭建产品帮助体系指南干货在这里

产品的成功不仅需要它的功能强大,还要让用户对产品有一个良好的体验。一个完善全面的产品帮助体系,能够很大程度地提升用户体验,帮助用户更好地理解和使用产品。如何搭建一个高效、实用的产品帮助体系呢?下面,我将为你…

Tomcat安装与配置(详细教程)

一、安装Tomcat服务器 1.下载地址(Tomcat官网)http://tomcat.apache.org/ 2.将下载的zip文件解压到指定的目录(例如:D盘,目录不要有中文) D:\apache-tomcat-9.0.43 二、配置Tomcat环境变量 (…

鸿蒙UI复用

鸿蒙UI复用 简介BuilderBuilder的使用方式一Builder的使用方式二Builder的使用方式三 Component使用Component复用UI 简介 在页面开发过程中,会遇到有UI相似的结构,如果每个UI都单独声明一份,会产生大量冗余代码,不利于阅读。遇到…

ai可以做思维导图吗?当然是可以的!

ai可以做思维导图吗?在快节奏的现代生活中,思维导图作为一种高效的信息组织和表达工具,越来越受到人们的青睐。随着人工智能(AI)技术的不断发展,AI思维导图软件也应运而生,它们不仅能够帮助用户…