消息队列(一)消息队列的工作流程

什么是消息队列

首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信,即A根据数据的变化情况通过调用B、C、D的接口,向它们推送产生的数据。

但是此种解决方案的问题也比较明显,首先就是系统间的耦合加重,扩展性较差,A 系统产生一条比较关键的数据,另外的系统都需要 A 系统将这个数据发送过来,就需要A进行定向的开发接口,对于系统间也需要考虑容错(发送失败?重发机制等等);如果此时新增了E系统需要数据,或者D系统不需要了,A系统就需要进行开发绑定;

在这种情况下,如果在A和BCD之间有一个第三方,A负责将数据交给第三方,而BCD甚至后面新增的E,都可以按需去第三方去取或者不去取,消除了A和其他系统的耦合,此外也减少了A的程序变更成本。这个第三方就是消息队列(MQ)。

消息队列的优缺点

优点

消息队列的优势主要有三点:就是解耦异步削峰

解耦已经在上文中体现了,通过第三方的MQ组件,能够降低集成系统间的耦合,减少不必要的定向API代码,使其扩展性得到保证。

关于异步主要体现在当一组数据变化,需要多处写入时,耗时则是时间的顺序加和,体验较差,而引入消息队列,则可以在一处完成后即刻响应。

 消息队列的另一个优势就是缓冲,在系统使用的高峰期,每秒并发请求数量是非常巨大的,此时数据层的并发能力受限于数据库,未必能够满足这种级别的并发,而数据又不能暂停等待数据库写入,此时,消息队列就可以居中起到缓冲消峰的作用。

请求或数据先进入到队列中暂存,由数据库逐步写入,而不影响正常的使用。 

缺点

和系统设计中引入其他组件一样,引入新组件后,系统的复杂度就会变高,系统的设计和开发成本也会隐式增长;主要体现在,引入消息队列后, 需要新增策略保证消费机制的完整(防重复、数据一致性、消息顺序性等) 。

另一个缺点就是系统的可用性受限,引入消息队列后,消息队列组件本身的稳定性也会传递到当前的系统中(例如:消息队列崩溃,系统的部分功能也将瘫痪)。

而使用消息队列的技术要点就是尽量取规避和解决引入消息队列所带来的负面影响。 

常用消息队列组件的比对

单机吞吐量topic 数量对吞吐量的影响时效性可用性消息可靠性功能支持
ActiveMQ万级,比 RocketMQ、Kafka 低一个数量级topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降ms 级高,基于主从架构实现高可用有较低的概率丢失数据MQ 领域的功能极其完备
RabbitMQ同 ActiveMQ在同等机器下,topic 数量增加时,吞吐量会受到影响,但具体影响程度需要根据实际情况确定(注:原始信息中关于此点描述为 Kafka 的情况,这里进行了调整)微秒级,这是 RabbitMQ 的一大特点,延迟最低同 ActiveMQ基本不丢基于 Erlang 开发,并发能力很强,性能极好,延时很低
RocketMQ10 万级,支撑高吞吐这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic,topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降ms 级非常高,分布式架构经过参数优化配置,可以做到 0 丢失MQ 功能较为完善,还是分布式的,扩展性好
Kafka10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景在同等机器下,topic 数量过多时,吞吐量会大幅度下降,如果要支撑大规模的 topic,需要增加更多的机器资源延迟在 ms 级以内非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用同 RocketMQ功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

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

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

相关文章

SAP配置网络打印机

1、网络打印机 在项目中需要用打印机打印表单,如果不配置网络打印机,通常需要通过连接特定的计算机(如打印服务器)来进行打印,或者使用本地连接的打印机,这样每台计算机可能需要单独配置打印机或安装驱动&…

GB/T34944-2017 《Java语言源代码漏洞测试规范》解读——安全功能

GB/T34944-2017 《Java语言源代码漏洞测试规范》标准是软件测试实验室开展代码测试活动的重要依据,也是软件测试实验室申请代码测试CNAS/CMA实验室认证时所依据的标准方法。本系列文章一起解读GB/T34944-2017 《Java语言源代码漏洞测试规范》,前面的文章…

NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

监听器listener

文章目录 监听器( listener)对Application内置对象监听的语法和配置对session内置对象监听的语法和配置 监听器( listener) 对象与对象的关系: 继承关联 tomcat一启动创建的顺序:监听器,config,application(全局初始化参数)&am…

LabVIEW数字式气压计自动检定系统

开发了一个基于LabVIEW开发的数字式气压计自动检定系统。在自动化检定PTB220和PTB210系列数字气压计,通过优化硬件组成和软件设计,实现高效率和高准确度的检定工作,有效降低人力成本并提升操作准确性。 项目背景 随着自动气象站的广泛部署&a…

在linux系统中使用jdbc访问sqlite数据库时报错“java.lang.UnsatisfiedLinkError”

1. 异常描述 在linux系统中使用jdbc访问sqlite数据库时出现如下错误提示: 2. 异常分析 可能是当前使用版本的sqlite-jdbc-xxx.jar版本有bug。 3. 异常解决 我是从3.8.9.1版本换到了3.16.1版本就好了。

Java(Sprigboot) 项目调用第三方 WebService 接口实现方式

文章目录 Java(Sprigboot) 项目调用第三方 WebService 接口实现方式WebService 简介业务场景描述WSDL 文档请求地址及方式接口请求/响应报文 代码实现1、接口请求/响应报文 JSON 准备(1)TransData(2)BaseInfo、InputData、OutputD…

基础爬虫案例实战

我们已经学习了多进程、requests、正则表达式的基本用法,但还没有完整地实现过一个爬取案例。这一节,我们就来实现一个完整的网站爬虫,把前面学习的知识点串联起来,同时加深对这些知识点的理解。 准备工作 我们需要先做好如下准备工作。 安…

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告:HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…

C++-----线性结构

C线性结构模板 概念:线性结构是一种数据元素之间存在一对一线性关系的数据结构,如数组、链表、栈、队列等。C中的模板可以让我们编写通用的代码,适用于不同的数据类型,而不必为每种数据类型都重复编写相同的代码结构。作用&#…

六大基础深度神经网络之CNN

左侧是传统卷积网络输入的是一列像素点,右侧是卷积神经网络,输入的是具有长宽通道数的原始图像 下图为整体架构。卷积层可以认为提取特征,池化层是压缩特征。全连接层是把图像展平然后计算10个类别的概率值 给出一张图像不同区域的特征不同&a…

AIOps平台的功能对比:如何选择适合的解决方案?

定义与概念 AIOps,即人工智能运维(Artificial Intelligence for IT Operations),是将人工智能技术应用于 IT 运维领域,以实现自动化、智能化的运维管理。它通过整合大数据、机器学习等先进技术,对海量运维数…

pr基础(3)-lumetri

这篇应该是基础的完结篇了,主要记录调色方面的相关知识。 主要的内容是lumetri的使用 Lumetri的翻译其实来源于两个部分的组合。"Lume"这个词源于拉丁语,意为明亮度或光亮度,是Luminance (Luma) 的缩写,强调了光线的强…

【 thefuck 安装与使用】Linux 终端自动纠错工具:一头GitHub上的“草泥马“ - thefuck,妈妈再也不用担心我打错命令行了!

目录 快速安装使用 . 1.简介 2.安装 3.配置 4.补充 官方盗料参考 快速安装使用 快速安装使用,四步即可: #Ubuntu/Debian系统 sudo apt update sudo apt install python3-dev python3-pip sudo pip3 install thefuck #编辑bashrc配置文件 vim ~/.bashrc…

基于pytorch的深度学习基础3——模型创建与nn.Module

三 模型创建与nn.Module 3.1 nn.Module 模型构建两要素: 构建子模块——__init()__拼接子模块——forward() 一个module可以有多个module; 一个module相当于一个运算,都必须实现forward函数; 每一个mod…

智慧农业物联网传感器:开启农业新时代

在当今科技飞速发展的时代,农业领域正经历着一场前所未有的变革,而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”,悄然渗透到农业生产的各个环节,为传统农业注入了全新的活力,让农业生产…

OpenLayers实现渐变透明填充和光效边界

之前在cesium中做过多边形的填充使用渐变透明的效果,那个时候使用的是着色器,利用距离中心点的距离去写shader函数,距离中心越远颜色透明度越高,那么本文我们在openlayers中来实现这一过程。老规矩还是先来看一下效果: 好接下来开始讲述原理,首先关于边界发光的原理我在O…

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中,应用安全与灵活性是两大关键考量因素。领域驱动设计(DDD)作为一种在软件设计领域广泛应用且颇具影响力的方法论,正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…

B端UI设计规范是什么?

一、B端UI设计规范是什么? B端UI设计规范是一套针对企业级应用界面设计的全面规则和标准,旨在确保产品界面的一致性、可用性和用户体验。 二、B端UI设计规范要素说明 B端UI设计的基本要素包括设计原则、主题、布局、颜色、字体、图标、按钮和控件、交互…

GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)

目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期,许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…