SpringCloud-MQ消息队列
一、消息队列介绍
MQ (MessageQueue) ,中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。消息队列是一种基于生产者-消费者模型的通信方式,通过在消息队列中存放和传递消息,实现了不同组件、服务或系统之间的异步通信。

二、消息队列的原理
消息队列的核心原理是基于生产者和消费者模型的异步通信。在这个模型中,生产者负责产生消息并将其发送到消息队列,而消费者则从队列中获取消息并进行处理。这种模型的主要优势之一是解耦,即生产者和消费者之间不直接通信,而是通过消息队列来中介。这种解耦能力使得系统更加灵活和可维护,不同组件可以独立演化,而不会直接影响其他组件。
消息队列通常实现了先进先出(FIFO)的消息传递机制,确保消息按照产生的顺序进行传递。这种有序的特性对于需要保持数据一致性和顺序性的业务场景非常重要。
在消息队列背后的另一个关键概念是持久性。持久性确保即使在系统故障或消息队列重启的情况下,消息也能够被保留和恢复。这对于关键业务流程和数据一致性至关重要。
三、消息队列的应用场景
-
异步通信: 在传统的同步通信中,一个服务请求另一个服务时,调用者需要等待被调用者完成处理才能继续。而在异步通信中,调用者发送消息后即可继续自己的工作,被调用者在完成处理后通知调用者。这种方式可以大大提高系统的响应速度和吞吐量。
-
解耦和削峰: 在大规模系统中,各个服务可能有不同的处理速度和处理能力。通过引入消息队列,生产者和消费者之间的解耦可以确保即使某个服务处理速度较慢,也不会直接影响到其他服务。消息队列还可以用于削峰,即在系统压力较大时,消息队列可以暂时存储请求,然后按照系统处理能力逐步消费,避免系统崩溃。
-
事件驱动架构: 消息队列是实现事件驱动架构的理想工具。各个组件通过发布和订阅消息来进行通信,使得系统更加灵活,能够更好地适应业务变化。
-
日志和审计: 消息队列可以被用作记录系统操作和事件的日志。这些日志对于故障排除、性能监控和合规性审计非常有价值。
四、常见消息队列
| 特性 | RabbitMQ | ActiveMQ | RocketMQ | Kafka |
|---|---|---|---|---|
| 公司/社区 | Rabbit | Apache | 阿里 | Apache |
| 开发语言 | Erlang | Java | Java | Scala&Java |
| 协议支持 | AMQP, XMPP, SMTP, STOMP | OpenWire, STOMP,REST, XMPP, AMQP | 自定义协议 | 自定义协议 |
| 可用性 | 高 | 一般 | 高 | 高 |
| 单机吞吐量 | 一般 | 差 | 高 | 非常高 |
| 消息延迟 | 微秒级 | 毫秒级 | 毫秒级 | 毫秒以内 |
| 消息可靠性 | 高 | 一般 | 高 | 一般 |
请注意,Kafka 的单机吞吐量信息并未提供,因此在表格中用“-”表示。此表格提供了 RabbitMQ、ActiveMQ、RocketMQ 和 Kafka 在不同特性方面的对比。
五、SpringCloud结合MQ消息队列
消息队列在分布式系统中起到了至关重要的作用,实现了不同服务之间的异步通信、解耦和提高系统的可伸缩性。Spring Cloud作为一套用于构建微服务架构的框架,提供了强大的消息队列支持,使得微服务之间的通信更加灵活和可靠。
1、消息队列与微服务的关系
在微服务架构中,消息队列扮演着重要的角色,帮助构建松散耦合、高内聚的分布式系统。以下是消息队列与微服务架构的关系:
-
服务之间的通信: 微服务架构中,各个微服务之间需要进行大量的通信。消息队列提供了一种解耦的方式,使得微服务之间可以通过异步消息进行通信,而不需要直接调用对方的API。这种解耦带来了更灵活、可维护的系统。
-
事件驱动架构: 微服务通常使用事件驱动的方式进行通信。当一个微服务完成某项工作时,它会发布一个事件,其他对该事件感兴趣的微服务可以订阅并作出响应。消息队列是实现事件驱动架构的理想选择,确保事件的可靠传递和处理。
-
异步处理: 微服务中的某些操作可能需要较长时间才能完成,例如复杂的计算、数据处理等。通过引入消息队列,这些操作可以变成异步的,提高了系统的响应性能和整体吞吐量。
-
故障处理: 在微服务架构中,某个服务的故障不应该影响到其他服务。消息队列的引入使得即使一个服务不可用,其他服务仍然能够通过消息队列继续进行工作,确保系统的稳定性。
2、消息队列的特性和优势
| 特性 | 优势 |
|---|---|
| 异步通信 | Spring Cloud MQ支持异步消息传递,使得微服务之间可以通过消息队列进行松耦合的异步通信,提高系统整体的响应性能。 |
| 解耦服务 | 通过消息队列,服务之间的耦合度得到降低,每个服务只需关注自己的业务逻辑,而不需要知道其他服务的具体实现细节。 |
| 可靠性 | 使用消息队列可以提高系统的可靠性,即使在高负载和异常情况下,消息队列能够保证消息的传递和处理。 |
| 分布式事务 | Spring Cloud MQ支持分布式事务,确保在跨服务调用的场景下,消息的发送和接收可以在事务的边界内进行。 |
3、支持SpringCloud的消息队列
| 特性 | 优势 |
|---|---|
| RabbitMQ | 作为一个可靠、灵活的消息代理系统,Spring Cloud对RabbitMQ提供了完善的支持,通过AMQP协议实现了可靠的消息传递。 |
| Apache Kafka | 作为分布式事件流平台,Spring Cloud对Kafka的支持使得开发者能够更轻松地使用Kafka实现事件驱动的微服务架构。 |
| ActiveMQ | 作为一款开源的消息中间件,Spring Cloud对ActiveMQ提供了集成,为微服务提供了一种可靠的消息通信方式。 |
使用示例:
// 生产者发送消息
@Autowired
private RabbitTemplate rabbitTemplate;public void sendMessage(String message) {rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);
}// 消费者监听消息
@RabbitListener(queues = "queueName")
public void receiveMessage(String message) {// 处理接收到的消息
}
以上示例演示了如何使用Spring Cloud的RabbitMQ支持,通过RabbitTemplate发送消息,通过@RabbitListener注解监听消息队列。
六、消息队列的相关技术
-
消息中间件: 消息队列通常建立在消息中间件之上。消息中间件是一种软件或硬件,它负责在生产者和消费者之间传递消息。常见的消息中间件包括RabbitMQ、Apache Kafka、ActiveMQ等。
-
消息协议: 消息协议定义了消息的格式和传递规则。AMQP(高级消息队列协议)是一种常见的消息协议,用于确保消息的可靠传递。其他协议如STOMP、MQTT等也被广泛使用。
-
持久性和消息确认: 持久性确保消息即使在系统故障时也能够被保留和恢复。消息确认机制则确保消息在被成功消费后才会被标记为已处理,防止消息丢失。
-
消息队列监控和管理: 对于大规模系统,消息队列的监控和管理是至关重要的。这包括监控消息的流量、队列的状态、消费者的健康状况等。一些消息中间件提供了专门的管理工具和API。
七、消息队列总结
消息队列作为现代软件架构中的关键组件,通过其异步通信、解耦和可靠性等特性,为构建高效、可伸缩、松散耦合的分布式系统提供了有力支持。本文从消息队列的背后原理、应用场景、与微服务的关系以及相关技术等方面展开探讨,旨在帮助读者更全面地理解消息队列的作用和价值。
在实际应用中,选择适合业务需求的消息队列系统,结合相应的消息中间件和协议,能够更好地构建出稳健、高效的系统架构。同时,消息队列的引入需要慎重考虑系统的实际情况,以确保其能够为系统带来最大的益处。随着技术的不断发展,消息队列将继续在分布式系统中发挥重要作用,为软件架构的演进提供支持。
相关文章:
SpringCloud-MQ消息队列
一、消息队列介绍 MQ (MessageQueue) ,中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。消息队列是一种基于生产者-消费者模型的通信方式,通过在消息队列中存放和传递消息,实现了不同组件、服务或系统…...
代码随想录算法训练营第三十八天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
509. 斐波那契数 刷题https://leetcode.cn/problems/fibonacci-number/description/文章讲解https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE视频讲解https://www.bilibili.com/video/BV…...
[python] 代码工具箱
在 Python 3 的开发过程中,有一些小而实用的工具包可以帮助减轻开发负担,提升工作效率。这些工具包通常专注于解决特定问题或提供特定功能,使代码更简洁和可维护。以下是一些常用的工具包,可以简化开发过程: backoff&a…...
Linux——网络基础
计算机网络背景 网络发展 独立模式: 计算机之间相互独立 在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再进行相应…...
Vue:双token无感刷新
文章目录 初次授权与发放Token:Access Token的作用:Refresh Token的作用:无感刷新:安全机制:后端创建nest项目AppController 添加login、refresh、getinfo接口创建user.dto.tsAppController添加模拟数据 前端Hbuilder创…...
实现一个作用域插槽的场景
vue项目中,插槽slot有三种分别是:默认插槽、具名插槽、作用域插槽。默认插槽和具名插槽在平时的开发中用的比较多,作用域插槽用的相对较少,以前我对作用域插槽不是很理解,现在理解了一下。下面通过代码来实现一个作用域…...
Qt QPainter的使用方法
重点: 1.QPainter在QWidget窗口的paintEvent中使用。 2.QPainter通常涉及到设置画笔、设置画刷、绘图(QPen、QBrush、drawxx)三个流程。 class Widget : public QWidget {Q_OBJECTprotected:void paintEvent(QPaintEvent *event) Q_DEC…...
低代码:数智化助力新农业发展
随着科技的飞速发展和数字化转型的深入推进,低代码开发平台正逐渐成为软件开发的热门话题。尤其在农业领域,低代码技术为传统农业注入了新的活力,助力新农业实现高效、智能的发展。 低代码开发平台的概念与特点 随着科技的飞速发展࿰…...
3d模型怎么镜像?3d模型镜像的步骤---模大狮模型网
在3D建模软件中,对3D模型进行镜像操作通常是指沿着某个轴线(如X、Y、Z轴)进行镜像翻转,使模型在该轴线的一侧产生对称的镜像效果。以下是在常见的3D建模软件中对3D模型进行镜像的一般步骤: 3d模型镜像步骤: 选择模型:…...
笔记本hp6930p安装Android-x86补记
在上一篇日记中(笔记本hp6930p安装Android-x86避坑日记-CSDN博客)提到hp6930p安装Android-x86-9.0,无法正常启动,本文对此再做尝试,原因是:Android-x86-9.0不支持无线网卡,需要在BIOS中关闭WLAN…...
为什么MySQL中多表联查效率低,连接查询实现的原理是什么?
MySQL中多表联查效率低的原因主要涉及到以下几个方面: 数据量大: 当多个表通过连接查询时,如果这些表的数据量很大,那么查询就需要处理更多的数据,这自然会降低查询效率。 连接操作复杂性: 连接查询需要对参与连接的每个表中的数…...
从下一代车规MCU厘清存储器的发展(2)
目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章,我们简述了当前主流的存储器技术,现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…...
Redis(理论版)
Redis 1.Redis是什么 Redis其实就是一个数据库,它是一个文档型数据库(非关系型数据库),而mysql是一个关系型数据库。它是一个开源的、基于内存的高性能键值存储数据库,支持多种数据结构,广泛用于缓存、消息队列、应用…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(四)
目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议(LPP&#x…...
Docker容器化解决方案
什么是Docker? Docker是一个构建在LXC之上,基于进程容器的轻量级VM解决方案,实现了一种应用程序级别的资源隔离及配额。Docker起源于PaaS提供商dotCloud 基于go语言开发,遵从Apache2.0开源协议。 Docker 自开源后受到广泛的关注和…...
Docker安装+基础命令
一、检测、配置安装环境 (1)查看linux版本,是否符合>centos 7 (2)查看网络是否通畅 (3)安装gcc,gcc-c编译器 (4)安装device-mapper-persistent-data和lvm2…...
构建高性能Linux Virtual Server(LVS)集群
目录 引言 一、集群的基本理论 (一)什么是集群 (二)集群的分类 (三)LB Cluster 负载均衡集群 1.按实现方式划分 2.按协议层划分 (四)HA 高可用集群实现 二、LVS简介 &…...
Linux:线程的概念
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上,线程是比进程更轻量级的一种指向流 或 线程是在…...
如何在jupyter notebook 中下载第三方库
在anconda 中找到: Anaconda Prompt 进入页面后的样式: 在黑色框中输入: 下载第三方库的命令 第三方库: 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具,…...
Linux下du命令和df命令的使用
du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
