当前位置: 首页 > news >正文

理解消息队列

消息队列(Message Queue)有下面四大作用:

  • 解耦。几个业务系统之间可以通过 MQ 解耦,例如做数据同步
  • 数据的顺序性和可恢复性
  • 异步通讯
  • 缓冲能力

理解 MQ

MQ 的前两个特点且不说,我们看看另外两个的。

异步通讯: MQ 与 RPC 区别

从 MQ 与 RPC 区别的切入,可以很好地理解 MQ 的异步能力。

首先,我们了解到 RPC(远程过程调用)通信本质上是一个同步过程,这就意味着在 RPC 方法调用期间,当前执行线程必须等待方法调用完全结束才能继续执行后续的操作。这种等待会增加系统的延迟,并可能影响用户体验,特别是在高并发场景下。

相比之下,消息队列采用的是天然的异步通信模式,即发送者和接收者之间可以独立地发送和接收消息,这种方式有效地解决了 RPC 在异步性和用户体验上的局限性。不过,异步通信模式也引入了额外的复杂性,比如需要处理消息传递的可靠性和顺序等问题。

正因为如此,在现代的大规模分布式系统中,通常会结合使用 RPC 和消息队列这两种通信机制,以此来平衡系统的性能需求和复杂度,同时解决多进程间的通信问题。

缓冲能力

消息队列的另一个关键特性是其出色的缓冲能力。由于消息队列可以配置成具有非常大的存储容量,尤其是在使用磁盘存储的情况下,几乎可以视为拥有无限的存储空间。这使得在流量高峰时段,系统能够暂时存储大量涌入的消息,然后在后续较低峰的时段内逐步处理这些消息,从而避免了因瞬时负载过大而导致的服务中断或系统崩溃。

例如,在电子商务网站进行限时抢购活动时,这类场景通常伴随着极高的瞬间流量冲击。此时,消息队列的高容量缓冲功能就显得尤为重要,它能够有效地吸收这股“洪峰”,确保系统的稳定运行。以下是一个简化版的秒杀业务UML序列图,展示了在这个场景中如何通过引入消息队列来解决问题。消息队列就像是一个巨大的缓冲池,可以吸收大量的并发请求,并且基本上保持了请求的原始顺序。接着,后端的服务(可能是部署在多台服务器上的)可以从容地处理队列中的秒杀请求(实现先到先得的原则),并将成功抢购的结果记录到数据库中以备查询。

在这里插入图片描述

MQ 发展情况

市场上现有的消息队列产品,可以根据它们的发展阶段和技术先进性分为三个世代。

第一代消息队列起源于 J2EE 时代,它们主要关注企业级特性,例如消息的持久化存储和事务支持,这些产品通常遵循 JMS 规范。这一时期的消息中间件一般作为 J2EE 套件的一部分出售。然而,随着 J2EE 时代的逐渐淡出,多数商业消息中间件已经逐渐被淘汰。在开源领域,仅剩少数几个项目仍在活跃,其中最为人所知的就是 Apache 的 ActiveMQ 和 JBoss 的 HornetQ。后来,JBoss 将 HornetQ 的源代码捐赠给了 Apache ActiveMQ 项目组,双方共同开发了 ActiveMQ Artemis。从2016年起,JBoss EAP7 企业版开始使用 ActiveMQ Artemis 替代之前的 HornetQ,而 RedHat 的 JBoss A-MQ 也基于 ActiveMQ 构建。尽管现在基于 J2EE 架构的应用减少了,但仍有部分重要商业软件依赖于这些传统消息队列。据 Gartner 报告显示,IBM MQ 在2016年占据了66%的市场份额。

第二代消息队列是在 Java 时代之后出现的。由于 Java 时代的中间件市场被 IBM 和 Tibco 主导,缺乏开放性和竞争,因此出现了一些试图打破这种局面的“挑战者”。这些团体推动了 AMQP(高级消息队列协议)的发展,这是一种开放的标准,旨在鼓励更多厂商实现兼容 AMQP 的产品。这一努力取得了成功,RabbitMQ 成为首个知名的支持 AMQP 的开源产品,自2007年发布以来,已成为最流行的消息队列之一。此外,AMQP 的普及还促进了 Java 领域的变革,例如 Apache 的 Qpid 项目支持 AMQP 协议,并提供了多种语言的支持,而 ActiveMQ 也在2013年开始支持 AMQP。

第三代消息队列是互联网时代的产物,它们的设计理念更为现代化,通常采用分布式架构,并利用 ZooKeeper 进行集群管理。这一代的代表产品是 LinkedIn 开源的 Kafka,它以其出色的可扩展性和高性能著称。Kafka 适用于多种数据管道和消息系统,许多重要的分布式处理框架如 Cloudera、Apache Storm 和 Spark 都支持与 Kafka 集成。在国内,一些公司也借鉴了 Kafka 的设计,如搜狐的 Jafka 和阿里巴巴的 RocketMQ。RocketMQ 在阿里巴巴内部被广泛应用,并于2012年开源。尽管开源后的维护一度停滞,但在2016年,阿里巴巴将其捐赠给 Apache 后,仍继续开发闭源版本并在阿里云上作为付费服务提供。

相关文章:

理解消息队列

消息队列(Message Queue)有下面四大作用: 解耦。几个业务系统之间可以通过 MQ 解耦,例如做数据同步数据的顺序性和可恢复性异步通讯缓冲能力 理解 MQ MQ 的前两个特点且不说,我们看看另外两个的。 异步通讯&#x…...

!什么,matlab也有网页版了

已经脱离matlab一下下几天的困境了,是的,matlab也有网页版了 附上网址: MATLAB Login | MATLAB & Simulink...

安卓屏幕息屏唤醒

背景,今天遇项目需要,需要在下载在后台任务运行时(如下载、上传或进行长时间计算),保持 CPU 活动,然后就写了这个实现方法,废话不多说上代码 第一步,再清单AndroidManifest文件声明权…...

类文件具有错误的版本 61.0, 应为 55.0

启动项目的时候报这个错误. 项目所使用的redis版本是jdk17的,而我使用的是Java11.所以要将redis版本降下来。 另一种方式就是修改jdk的版本,在设置修改编译版本,在版本控制里面修改jdk的版本。...

vue点击菜单,出现2个相同tab,啥原因

点击菜单,出现相同的tab 出现的原因: 1.组件中的name 和配置路由文件js, 的大小写不一致导致 2、跳转的路由整个地址,大小写不一致大致...

【网络原理】——图解HTTPS如何加密(通俗简单易懂)

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:HTTP为什么不安全 二:HTTPS加密过程 1:密码学中的概念 &…...

CentOS 修改服务器登录密码的完整指南

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

【PnP】详细公式推导,使用DLT直接线性变换法求解相机外参

文章目录 🚀PnP1️⃣ 求解不考虑尺度的解2️⃣ 恢复解的尺度3️⃣ 另一种解法 🚀PnP PnP(Perspective-n-Point)是求解3D到2D点相机外参的算法。PnP算法有DLT直接线性变换、P3P三对点估计位姿、EPnP(Efficient PnP)、BA(Bundle Adjustment)光速法平差。这…...

怎样把书上的事件图改编成活动图-《分析模式》漫谈43

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》中模型图的UML改编,之前也有人做过,Martin Fowler网站上给出了部分改编成果。 这些改编成果只覆盖了部分章节,而且只是把类型图&#…...

CodeFormer——基于代码本查找变换器的鲁棒盲人脸修复翻译

文章目录 原文翻译摘要1 Introduction2 Related Work3 Methodology3.1 Codebook Learning (Stage I)3.2 Codebook Lookup Transformer Learning (Stage II)3.3 Controllable Feature Transformation (Stage III) 4 Experiments4.1 Datasets4.2 Experimental Settings and Metri…...

监控场景下,视频SDK的应用策略

在当今数字化、智能化的时代背景下,音视频技术的快速发展正深刻改变着各行各业。特别是在监控领域,音视频SDK的应用不仅极大地提升了监控系统的性能与效率,还推动了监控技术的智能化转型。 一、音视频SDK 音视频SDK是一套集成了音视频编解码…...

前端面试必备!HTML 超实用考点全解析

在前端开发的广阔领域中,面试是检验开发者能力的关键环节。而 HTML 作为前端开发的基础,在面试中常常占据重要地位。无论是初入前端领域的新人,还是经验丰富的开发者,都可能在 HTML 的相关问题上遭遇挑战。今天,就让我…...

自动驾驶系统研发系列—避免事故的利器:AEB自动紧急制动系统详解

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…...

zabbix 6.0 监控clickhouse(单机)

zabbix 6.0 LTS已经包含了clickhouse的监控模板,所以我们可以直接使用自带的模板来监控clickhouse了。 0.前置条件 clickhouse 已经安装,我安装的是24.3.5.47zabbix-agent 已经安装并配置。系统是ubuntu 2204 server 1. 新建监控用户 使用xml的方式为…...

Redis的RDB执行原理

文章目录 引入‘页表’的概念Copy-On-WriteRDB快照 引入‘页表’的概念 Linux里面每个进程都是无法直接操作物理内存的,每个进程只能用页表映射本进程的虚拟内存到物理内存的映射。 bgsave的时候,主进程会fork(复制)一个子进程&am…...

速度背!24下软考网工“经典100道母题来了”!

2024下软考已经迫在眉睫了,准备考下半年软考多媒体应用设计师的小伙伴们准备得怎么样了? 单单只啃书肯定不太够,今天给大家整理了多媒体100道经典题, 这些都是历年高频考点整理,包含24下软考80%以上考点,跟…...

three.js 纹理(Texture)、深度纹理(DepthTexture)、视频纹理(VideoTexture)

纹理(Texture) 创建一个纹理贴图,将其应用到一个表面,或者作为反射/折射贴图。 构造函数 Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) // load a texture, set wrap…...

广东自闭症全托机构:提供高质量的康复服务

在广东这片充满活力的土地上,自闭症儿童的康复需求日益受到社会各界的关注。在众多自闭症全托机构中,位于广州的星贝育园自闭症儿童寄宿制学校以其专业的团队、全面的服务体系以及显著的康复成效,成为了众多家庭的信赖之选。 星贝育园&#…...

Nodejs安装配置及创建vue项目

文章目录 Node简介Node官网安装node.js验证是否安装成功 npm简介配置node远程拉取仓库安装cnpm(国内插件管理命令)npm相关参数解读 vue简介创建vue项目 Node 简介 Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境,它让开发人员能…...

浅析正交投影矩阵和透视投影矩阵的推导

先上矩阵的内容。在opengl中,分别通过glOrtho函数和glFrustum函数得到正交投影矩阵和透视投影矩阵。 glOrtho 函数描述生成正交投影矩阵。 (左、 下、 近) 和 (右、 上、 近) 参数分别指定近剪裁平面上映射到窗口左下角和右上角的点,假定眼睛位于 (0、0…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...