【MQ篇】初识MQ!

news2025/4/22 20:30:43

在这里插入图片描述

目录

      • 一、什么是MQ?简单来说就是个“快递中转站” 📦
      • 二、为什么要用MQ?用了它,好处多多!🤩
      • 三、MQ的应用场景:各行各业都能用!🌍
      • 四、MQ的优缺点:硬币的两面!⚖️
      • 五、市面上常见的MQ产品:各有千秋!⚔️

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!

🌟了解 Netty 的 线程模型 请看 : 【Netty篇】Netty的线程模型

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning

嘿,朋友!很高兴能和你聊聊消息队列(Message Queue,简称MQ)这个话题。这看上去挺高大上的!😎 别担心,我会用最通俗易懂的方式,夹杂着一些小表情,让你彻底明白MQ是何方神圣。

一、什么是MQ?简单来说就是个“快递中转站” 📦

想象一下,你开了一家网店,顾客下单后,你需要通知仓库发货、更新库存、给用户发送短信等等。如果没有MQ,你的系统可能就要像这样:

顾客下单 -> 调用仓库系统 -> 等待仓库响应 -> 调用库存系统 -> 等待库存响应 -> 调用短信服务 -> 等待短信服务响应 -> 订单完成

这就像让快递员直接跑遍所有环节,效率低下不说,万一哪个环节出了问题(比如仓库系统崩了),整个下单流程就卡住了!😱

而MQ就像一个“快递中转站”。顾客下单后,你的系统只需要把“发货通知”、“更新库存通知”、“短信通知”这些消息扔给MQ这个中转站,然后就没事儿了,可以继续处理其他订单。至于仓库系统、库存系统、短信服务什么时候去MQ这个中转站“取件”(处理消息),它们自己说了算。这样一来:

顾客下单 -> 发送消息给MQ -> 订单完成

仓库系统 -> 从MQ接收“发货通知” -> 处理发货
库存系统 -> 从MQ接收“更新库存通知” -> 更新库存
短信服务 -> 从MQ接收“短信通知” -> 发送短信

看到了吗?通过MQ,各个系统之间解耦了,不再需要直接互相调用和等待,效率也大大提升了!🚀

二、为什么要用MQ?用了它,好处多多!🤩

用了MQ,就像给你的系统装上了“加速器”和“保险箱”,好处多到你想不到:

  1. 异步处理(Asynchronous Processing):让你的系统更快!💨
    就像上面网店的例子,下单后不需要等待所有后续操作完成,用户可以立即看到下单成功的页面,体验更好。一些非核心的业务逻辑(比如发送通知、记录日志)可以异步处理,不会阻塞主流程。

  2. 应用解耦(Application Decoupling):让你的系统更灵活!🤸
    各个系统之间不再直接依赖,修改一个系统不会影响到其他系统。比如,你想把短信服务换成邮件服务,只需要修改发送消息的模块和接收邮件消息的模块,其他系统完全不用改动。

  3. 流量削峰(Traffic Shaping):让你的系统更稳定!⛰️
    在秒杀、抢购等高并发场景下,短时间内会有大量的请求涌入。如果直接让后端系统处理,很可能导致系统崩溃。MQ可以像一个“蓄水池”,先把请求(消息)存起来,后端系统再根据自己的处理能力慢慢地从MQ中取出消息处理,避免系统被瞬间的流量冲垮。

  4. 可靠性(Reliability):让你的消息不丢失!🔒
    一些重要的业务数据,比如订单信息、支付信息,绝对不能丢失。MQ通常会有完善的机制(比如消息持久化、确认机制)来保证消息的可靠传输,即使系统发生故障,消息也能被正确地传递和处理。

  5. 最终一致性(Eventual Consistency):让你的数据保持一致!🤝
    在分布式系统中,由于网络延迟等原因,数据的一致性是一个挑战。MQ可以作为不同系统之间同步数据的桥梁,虽然不能保证数据在瞬间完全一致,但可以保证在最终状态下是一致的。

三、MQ的应用场景:各行各业都能用!🌍

MQ的应用场景非常广泛,只要涉及到系统之间的通信和协作,都可以考虑使用MQ:

  • 订单处理: 电商平台下单、支付、物流等环节的消息传递。
  • 用户行为分析: 记录用户点击、浏览等行为,用于后续的数据分析和推荐。
  • 日志收集: 收集各个服务的日志信息,统一存储和分析。
  • 任务队列: 将耗时的任务(比如图片处理、视频转码)放入队列,后台异步执行。
  • 系统集成: 连接不同的遗留系统或第三方服务。
  • 微服务架构: 各个微服务之间的通信和事件驱动。

四、MQ的优缺点:硬币的两面!⚖️

任何技术都有其两面性,MQ也不例外:

优点:

  • 解耦: 服务之间依赖性降低。
  • 异步: 提升系统响应速度和吞吐量。
  • 削峰: 应对高并发场景,保证系统稳定性。
  • 可靠性: 保障消息的可靠传递。
  • 最终一致性: 保证分布式系统的数据最终一致。

缺点:

  • 系统复杂度增加: 引入MQ需要额外的维护和管理。
  • 消息丢失或重复消费的风险: 需要考虑如何保证消息的可靠性和幂等性。
  • 系统可用性依赖于MQ: 如果MQ服务出现故障,会影响到整个系统的消息传递。
  • 可能存在消息延迟: 消息从发送到被消费需要一定的时间。

五、市面上常见的MQ产品:各有千秋!⚔️

市面上有很多优秀的MQ产品,它们各有特点,适用于不同的场景:

  1. RabbitMQ:小巧灵活的“兔子” 🐇

    • 特点: 基于AMQP(Advanced Message Queuing Protocol)协议,轻量级,部署简单,社区活跃,插件丰富。
    • 优点: 成熟稳定,性能不错,管理界面友好。
    • 缺点: 单机吞吐量相对较低,高并发场景下可能成为瓶颈。
  2. Apache Kafka:高吞吐的“大象” 🐘

    • 特点: 分布式消息队列,高吞吐量,高可扩展性,主要用于大数据场景(日志收集、流式处理)。
    • 优点: 性能极高,适合处理海量数据。
    • 缺点: 相对复杂,学习曲线陡峭,功能相对简单(例如,消息确认机制不如RabbitMQ灵活)。
  3. Apache RocketMQ:阿里出品的“火箭” 🚀

    • 特点: 纯Java开发,支持分布式事务,消息轨迹追踪,适用于金融等对数据一致性要求高的场景。
    • 优点: 性能优异,功能强大,支持多种消息模式。
    • 缺点: 社区活跃度不如RabbitMQ和Kafka。
  4. Redis:不仅仅是缓存的“瑞士军刀” 🔪

    • 特点: 基于内存的键值存储系统,通过List数据结构可以实现简单的消息队列功能。
    • 优点: 性能极高,操作简单。
    • 缺点: 可靠性不如专业的MQ(断电可能丢失数据),功能较简单,不适合复杂的业务场景。
  5. Amazon SQS/SNS、Google Cloud Pub/Sub、Azure Queue Storage/Service Bus:云服务商的“官方标配” ☁️

    • 特点: 与云平台深度集成,易于使用和扩展,通常提供高可用性和可靠性保障。
    • 优点: 无需自己维护基础设施,按需付费。
    • 缺点: 可能受限于云平台的服务和定价策略。
特性RabbitMQApache KafkaApache RocketMQRedis (List)云服务商 MQ (例如 AWS SQS/SNS)
核心特点轻量级,灵活,基于AMQP高吞吐,分布式,流处理高吞吐,事务消息,消息轨迹基于内存,简单快速与云平台集成,高可用,易扩展
协议AMQP自有协议自有协议RESP各云服务商自有协议
性能/吞吐量中等非常高 (内存操作)
可靠性可配置(持久化、Confirm机制、Return机制)可配置(副本机制)可配置(同步/异步刷盘、HA)较低(可能丢失数据,取决于持久化配置)(云服务商通常提供高可靠性保障)
消息模型消息队列,交换机,路由键主题(Topic),分区(Partition),偏移量(Offset)主题(Topic),标签(Tag),消费组(Consumer Group)简单的队列(List)队列(SQS),发布/订阅(SNS)
事务支持支持(通过插件)不直接支持支持(分布式事务)不支持可能支持(取决于具体云服务)
消息顺序性在单个队列中基本保证FIFO在单个分区内保证FIFO在单个队列中基本保证FIFO在单个List中保证FIFO可能保证(取决于具体云服务和配置)
延迟毫秒级毫秒级(取决于配置)毫秒级微秒级毫秒级
复杂性中等较高中等低(易于使用)
适用场景传统企业应用,微服务,对可靠性有一定要求大数据处理,日志收集,流计算金融支付,对数据一致性要求高的场景缓存,简单的消息通知云原生应用,Serverless架构
社区活跃度非常高中等高(取决于云平台的影响力)

如何选择?

选择哪个MQ产品取决于你的具体需求:

  • 轻量级应用、对消息可靠性要求不高: 可以考虑RabbitMQ。
  • 大数据处理、高吞吐量要求: Kafka是首选。
  • 金融级应用、对事务一致性要求高: RocketMQ可能更适合。
  • 简单场景、追求极致性能: Redis也可以作为一种选择。
  • 已经使用云服务: 优先考虑云服务商提供的MQ产品。

希望我这番详细又接地气的讲解,能让你对MQ有一个全面的了解!😊

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

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

相关文章

2、SpringAI接入ChatGPT与微服务整合

2、SpringAI接入ChatGPT与微服务整合 小薛博客AI 大模型资料 1、SpringAI简介 https://spring.io/projects/spring-ai Spring AI是一个人工智能工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于人工智能领域&#…

榕壹云预约咨询系统:基于ThinkPHP+MySQL+UniApp打造的灵活预约小程序解决方案

数字化咨询场景的痛点与解决方案 在心理咨询、医疗问诊、法律咨询等需要预约服务的场景中,传统线下预约存在效率低、管理复杂、资源分配不均等问题。榕壹云预约咨询系统基于ThinkPHPMySQLUniApp技术栈开发,为咨询类行业提供了一套高效、安全、可扩展的数…

opencv 图像矫正的原理

图像矫正的原理是透视变换,下面来介绍一下透视变换的概念。 听名字有点熟,我们在图像旋转里接触过仿射变换,知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程,转换过程坐标点的相对位置和属性不发生变换,…

计算机前沿技术课程论文 K-means算法在图像处理的应用

K-means算法在图像处理的应用 这是本人在计算机前沿技术课程中的课程论文文章,为了方便大家参考学习,我把完整的论文word文档发到了我的资源里,有需要的可以自取。 点击完整资源链接 目录 K-means算法在图像处理的应用摘要:引言1…

WSL2-Ubuntu22.04安装URSim5.21.3

WSL2-Ubuntu22.04安装URSim5.21.3 准备安装启动 准备 名称版本WSL2Ubuntu22.04URSim5.21.3VcXsrvNaN WSL2安装与可视化请见这篇:WSL2-Ubuntu22.04-配置。 安装 我们是wsl2-ubuntu22.04,所以安装Linux版本的URSim,下载之前需要注册一下,即…

blender 录课键位显示插件(图文傻瓜式安装)

1、下载 点击这个链接进行下载https://github.com/nutti/Screencast-Keys 下载好不用解压 2、安装 打开blender进行安装 点击编辑选择偏好设置 选择插件再点击这个下箭头 选择从磁盘安装 然后找到自己刚刚下载好的,点击从磁盘安装 安装完成后勾选上插件 …

天翼云手机断开连接2小时关机

2025-04-21 天翼云手机断开连接2小时自动 天翼云手机 4元1个月 天翼云手机永不关机 天翼云手机不休眠 天翼云手机断开连接时,界面显示:离线运行,2小时后自动关机 电脑每小时自动连接一次 手机每小时自动连接一次

基于 FFmpeg 的音视频处理基础原理与实验探究

目录 1 基本知识1.1 解封装1.2 AAC和ADTS说明 1.3 H2641.3.1 H264编码结构解析1.3.2 NALU1.3.2 分类 2 实验1 探究音视频信息2.1 重要结构体介绍2.2 相关的API 3 实验二 提取AAC数据4 实验三 提取h264 1 基本知识 1.1 解封装 封装的逆向操作:封装是把音频流、视频流…

我用deepseek做了一个提取压缩文件夹下pdf和word文件工具

由于最近需要把大量的压缩文件的pdf和word文件统一复制到一个文件夹中。 我们一般正常操作方式的是把一个压缩文件一个一个解压,然后在把一个的解压好的文件夹下文件复制到另外一个文件夹中。 这个也需太繁琐了,从以往统计的需要花费两个小时间&#x…

机器人进阶---视觉算法(五)仿射变换和投影变换有什么区别

仿射变换和投影变换有什么区别 1. 定义2. 几何特性3. 变换矩阵4. 应用场景5. Python代码示例仿射变换投影变换6. 总结仿射变换和投影变换都是图像处理中常用的几何变换方法,但它们在变换性质、应用场景和变换矩阵等方面存在一些关键区别。 1. 定义 仿射变换 (Affine Transform…

如何在 Amazon EC2 上部署 Java(Spring Boot 版)

让我们学习如何将 Java Spring Boot Web 服务器部署到 Amazon EC2。每月只需 3 美元。 使用 Azure,您可能不知道要花费多少钱。 Spring Boot 项目示例 在本教程中,我们将重点介绍如何将 Java Spring Boot 服务器部署到 Amazon EC2,因此我们不…

IDEA打不开、打开报错

目录 场景异常原因解决 场景 1、本机已经安装了IDEA 2、再次安装另外一个版本的IDEA后打不开、打开报错 异常 这里忘记截图了。。。 原因 情况1-打不开:在同一台电脑安装多个IDEA是需要对idea的配置文件进行调整的,否则打不开 情况2-打开报错&#…

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤:1.首先安装脚手架的环境,2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目:1.和Vue一样,先安装脚手架然后通过脚手架指令搭建;2.npx create-…

CSS例子 > 图片瀑布流布局(vue2)

<template><div class"container"><!-- 临时容器用于计算高度 --><div v-if"!isLayoutReady" class"temp-container"><divv-for"(item, index) in list":key"temp- index":ref"(el) > …

1.2软考系统架构设计师:系统架构的定义与作用 - 练习题附答案及超详细解析

系统架构定义与作用综合知识单选题 题目覆盖核心概念、发展历程、设计原则、评估标准及易混淆点&#xff0c;附答案解析&#xff1a; 1. 系统架构的标准定义源自于以下哪个标准&#xff1f; A. ISO/IEC 9126 B. IEEE 1471-2000 C. TOGAF 9.2 D. ITIL v4 答案&#xff1a;B 简…

关于springmvc的404问题的一种猜测解决方案

本文是记录关于在学习动力结点老杜的springmvc时候遇到的404报错的一种解决方式&#xff1b; 由于本人之前学过老杜的springmvc&#xff0c;且运行成功&#xff0c;当时使用的是tomcat10.1.19版本。 idea使用2023.3.2版本。 而这次进行回顾的时候&#xff0c;使用tomcat10.0.1…

使用Postman调测“获取IAM用户Token”接口实际操作

概述 Postman是网页调试与辅助接口调用的工具&#xff0c;具有界面简洁清晰、操作方便快捷的特性&#xff0c;可以处理用户发送的HTTP请求&#xff0c;例如&#xff1a;GET&#xff0c;PUT、POST&#xff0c;DELETE等&#xff0c;支持用户修改HTTP请求中的参数并返回响应数据。…

如何测试雷达与相机是否时间同步?

在多传感器融合系统中&#xff0c;相机与雷达的协同感知已成为环境理解的关键。相机通过捕捉纹理信息识别物体类别&#xff0c;而雷达利用激光或毫米波实现全天候精确测距。两者的数据融合既能避免单一传感器缺陷&#xff08;如相机受光照影响、雷达缺乏语义信息&#xff09;&a…

爆肝整理!Stable Diffusion的完全使用手册(二)

继续介绍Stable Diffusion的文生图界面功能。 往期文章详见: 爆肝整理&#xff01;Stable Diffusion的完全使用手册&#xff08;一&#xff09; 下面接着对SD的文生图界面的进行详细的介绍。本期介绍文生图界面的截图2&#xff0c;主要包含生成模块下的采用方法、调度类型、迭…

OpenCV day5

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 目录 9.cv2.adaptiveThreshold(): 10.cv2.split()&#xff1a; 11.cv2.merge()&#xff1a; 12.cv2.add()&#xff1a; 13.cv2.subtract()&#xff1a; 14.cv2.multiply()&#xff1a; 15.cv2.divide()&#xff1a; 1…