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

news2025/2/24 23:39:19

什么是消息队列

首先,代入一个场景,我现在做一个多系统的集成,分别有系统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 功能,在大数据领域的实时计算以及日志采集被大规模使用

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

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

相关文章

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…

WEB入门——文件上传漏洞

文件上传漏洞 一、文件上传漏洞 1.1常见的WebShell有哪些?1.2 一句话木马演示1.2 文件上传漏洞可以利用需满足三个条件1.3 文件上传导致的危害 二、常用工具 2.1 搭建upload-labs环境2.2 工具准备 三、文件上传绕过 3.1 客户端绕过 3.1.1 实战练习 :upl…

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的,类似于socket通信,一台设备需要开放服务器套接字并处于listen状态,而另一台设备使用服务器的MAC地址发起连接。连接建立后,服务器和客户端就都通过对BluetoothSocket进行读写…

红米Note 9 Pro5G刷小米官方系统

前言 刷机有2种方式:线刷 和 卡刷。 线刷 线刷:需要用电脑刷机工具,例如:XiaoMiFlash.exe,通过电脑和数据线对设备进行刷机。 适用场景: 系统损坏无法开机。恢复官方出厂固件。刷机失败导致软砖、硬砖的…

html + css 淘宝网实战

之前有小伙伴说,淘宝那么牛逼你会写代码,能帮我做一个一样的淘宝网站吗,好呀,看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

SOME/IP 协议详解——信息格式

文章目录 1. 头部格式1.1 消息 ID(Message ID)1.2 长度(Length)1.3 请求 ID(Request ID)1.4 协议版本(Protocol Version):1.5 接口版本(Interface Version&am…

使用QML实现播放器进度条效果

使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下: Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…

Android——自定义按钮button

项目中经常高频使用按钮,要求:可设置颜色,有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…

【双指针算法】--复写零(Java版)

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

联合目标检测与图像分类提升数据不平衡场景下的准确率

联合目标检测与图像分类提升数据不平衡场景下的准确率 在一些数据不平衡的场景下,使用单一的目标检测模型很难达到99%的准确率。为了优化这一问题,适当将其拆解为目标检测模型和图像分类模型的组合,可以更有效地控制最终效果,尤其…

HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化

与传统标准动态范围( SDR)视频相比,高动态范围( HDR)视频由于比特深度的增加提供了更加丰富的亮区细节和暗区细节。最新的显示技术通过清晰地再现 HDR 视频内容使得为用户提供身临其境的观看体验成为可能。面对目前日益…

LabVIEW声音信号处理系统

开发了一种基于LabVIEW的声音信号处理系统,通过集成的信号采集与分析一体化解决方案,提升电子信息领域教学与研究的质量。系统利用LabVIEW图形化编程环境和硬件如USB数据采集卡及声音传感器,实现了从声音信号的采集到频谱分析的全过程。 项目…

OpenCL(壹):了解OpenCL模型到编写第一个CL内核程序

目录 1.前言 2.简单了解OpenCL 3.为什么要使用OpenCL 4.OpenCL架构 5.OpenCL中的平台模型(Platform Model) 6.OpenCL中的内存模型(Execution Model) 7.OpenCL中的执行模型(Memory Model) 8.OpenCL中的编程模型(Programmin Model) 9.OpenCL中的同步机制 10.编写第一个OpenCL程序…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件,它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏(AppBar)、内容区域(body)、抽屉菜单(Drawer)、底部导…

【数据结构】数据结构整体大纲

数据结构用来干什么的?很简单,存数据用的。 (这篇文章仅介绍数据结构的大纲,详细讲解放在后面的每一个章节中,逐个击破) 那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢&#xff…

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日,链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网,同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS,其采用四层网络架构,其中…

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

生信软件开发2 - 使用PyQt5开发一个简易GUI程序

往期文章: 生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件 1. 使用PyQt5设计一个计算器主程序 要求PyQt5 > 5.6, calculator.py与MainWindow.py处于同一目录,下载mainwindow-weird.ui和mainwindow.ui资源,运行calculator.py即…

“计算几何”简介

计算几何(Computational Geometry)简单来说就是用计算机解决几何问题。 Computational指“using or connected with computers使用计算机的;与计算机有关的”,Geometry指“the branch of mathematics that deals with the measur…