消息队列的基本概念以及作用

news2024/11/26 22:34:39

目录

  • 一、消息队列概述
    • 1.1 什么是消息队列
    • 1.2 消息队列的作用和优势
      • 1.2.1 解耦
      • 1.2.2 异步
      • 1.2.3 削峰
    • 1.3 引入消息队列带来的问题
    • 1.4 典型应用场景
  • 参考资料

一、消息队列概述

1.1 什么是消息队列

消息队列(Message Queue, MQ)是一种用于在应用程序之间或不同组件之间进行异步通信的机制

它是一种存储和转发消息的系统,允许生产者将消息发送到队列,然后由消费者从队列中接收消息。

1.2 消息队列的作用和优势

消息队列的主要作用包括:

  • 解耦:通过引入消息队列,生产者和消费者之间实现了解耦。它们不需要直接知道彼此的存在,而是通过发送和接收消息进行通信。
  • 异步: 生产者和消费者之间的通信是异步的,即生产者不需要等待消费者立即处理消息。通过异步处理提高系统性能(削峰、减少响应所需时间)
  • 削峰:将某一段时间的超高流量分摊到更长的一段时间内去消化,避免了流量洪峰击垮系统。
  • 缓冲:队列充当了一个缓冲区,使得即使生产者和消费者的速度不一致,也能够平滑地进行通信。

实际上,这三个作用就是消息队列的典型应用场景

同时,异步是实现削峰和缓冲的原因。

1.2.1 解耦

如果模块之间不存在直接调用,那么新增模块或者修改模块就对其他模块影响较小,这样系统的可扩展性无疑更好一些。

我们最常见的事件驱动架构类似生产者消费者模式,在大型网站中通常用利用消息队列实现事件驱动结构。

请添加图片描述

1.2.2 异步

在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的情况下数据库压力剧增,使得响应速度变慢。

但是在使用消息队列之后,用户的请求数据发送给消息队列之后立即 返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度快于数据库(消息队列也比数据库有更好的伸缩性),因此响应速度得到大幅改善

请添加图片描述

1.2.3 削峰

消息队列具有很好的削峰作用的功能——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务

举例:在电子商务一些秒杀、促销活动中,合理使用消息队列可以有效抵御促销活动刚开始大量订单涌入对系统的冲击。如下图所示:
请添加图片描述

1.3 引入消息队列带来的问题

技术是把双刃剑!

引入消息队列,会带来新的问题:

  • 增加系统复杂性。 加入MQ之后,你需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题
  • 降低了系统的可用性。在加入MQ之前,你不用考虑消息丢失或者说MQ挂掉等等的情况,但是,引入MQ之后你就需要去考虑了
  • 复杂性增加。消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了

1.4 典型应用场景

消息队列在分布式系统、微服务架构、实时数据处理等领域广泛应用,为系统提供了可靠、高效的消息传递机制。

  1. 微服务架构: 在微服务架构中,各个微服务之间需要进行异步通信,以提高系统的弹性和可伸缩性。消息队列可以用于解耦微服务之间的通信,实现松耦合和灵活的服务协作。
  2. 任务异步处理: 当需要异步处理耗时的任务时,消息队列可以作为任务队列的中介,生产者将任务放入队列,而消费者则从队列中取出并处理这些任务,从而提高系统的响应速度。
  3. 实时数据处理: 在需要进行实时数据处理和分析的场景中,消息队列可以用于实时事件的传递和处理。例如,日志收集、实时监控系统等都可以通过消息队列实现。
  4. 解耦系统组件: 消息队列可以帮助解耦系统中的不同组件,使它们独立运作。这在大型分布式系统中特别有用,因为组件之间的松耦合可以提高系统的可维护性和可扩展性。
  5. 流媒体处理: 在处理实时流媒体数据时,消息队列可以用于传递和处理数据流。例如,音视频处理、实时推送等场景都可以借助消息队列实现。
  6. 事件驱动架构: 消息队列是事件驱动架构中的关键组件。通过将事件发布到消息队列,系统中的其他组件可以订阅并响应这些事件,从而实现松耦合的事件驱动系统。
  7. 订单处理和支付系统: 在电子商务系统中,消息队列可以用于处理订单和支付事务。例如,将订单信息异步传递给库存管理系统、支付系统等,以提高订单处理的效率和可靠性。
  8. 分布式系统通信: 在分布式系统中,各个节点之间需要进行通信和协同工作。消息队列可以用于支持分布式系统的通信和协同,以实现数据的可靠传递。

这些应用场景展示了消息队列在不同领域中的灵活性和通用性,使其成为构建可靠、可伸缩和弹性系统的重要工具。

参考资料

新手也能看懂,消息队列其实很简单 - 知乎 (zhihu.com)
消息队列:从选型到原理,一文带你全部掌握 (qq.com)

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

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

相关文章

maven学习笔记总结

目录 一、maven简介 二、GAVP属性 三、基于 IDLE 的 Maven 工程创建 1)java标准工程(Javase)的创建 2)java企业工程(Javaee)的创建 a)手动创建 b)插件方式创建(fil…

模电笔记。。。。

模电 2.8 蜂鸣器 按照蜂鸣器驱动方式分为有源蜂鸣器和无源蜂鸣器 有源的有自己的震荡电路,无源的要写代码控制。 里面有个线圈,相当于电感,储能,通直隔交。 蜂鸣器的参数:额定电压,工作电压&#xff0…

vue3递归组件---树形组件

第一种方式&#xff0c;直接自己调用自己 Tree.vue <template><div class"tree"><div v-for"(item, index) in data" :key"item.name">每一层 {{ item.name }}<Tree v-if"item?.children?.length" :dataitem…

IT外包驻场加速企业IT创新

随着科技的快速发展&#xff0c;企业在追求创新和应用IT技术方面面临挑战。IT外包驻场服务成为许多企业的选择&#xff0c;助力企业实现快速、高效的IT项目实施和应用。 IT外包驻场服务的主要目标是帮助企业在IT创新方面取得突破。这种服务模式不仅仅是提供技术支持&#xff0c…

java 之 继承与多态的详细介绍

文章目录 类的继承1. 基本语法2. 继承的特点3. 方法的重写&#xff08;方法的覆盖&#xff09;super 关键字1. 调用父类的构造器2. 访问父类的成员变量3. 调用父类的方法4. 在构造器中调用父类方法封装性以及访问修饰符抽象方法1. 声明抽象类2. 抽象方法3. 继承抽象类4. 抽象类…

继承与派生(2)

1.派生类的权限&#xff1a;派生类的成员函数可以访问基类的public和protected类型的成员&#xff0c;而派生类的对象只能访问public类型的成员 2.创建顺序&#xff08;先创造后析构&#xff09;&#xff1a;基类函数&#xff0c;派生类函数&#xff0c;组合类函数 类的组合按…

12v转48v升压电源芯片:参数、特点及应用领域

12v转48v升压电源芯片&#xff1a;参数、特点及应用领域 随着电子设备的日益普及&#xff0c;电源芯片的需求也在不断增长。今天我们将介绍一款具有广泛应用前景的升压电源芯片——12v转48v升压电源芯片。该芯片具有宽输入电压范围、高效率、固定工作频率等特点&#xff0c;适…

ShardingSphere 使用distinct或者GROUP BY 报类强转的错

ShardingSphere 使用distinct或者GROUP BY 报错 distinct 使用sharding-sphere分表后 对于使用distinct 会报错 类型对象属性转化异常 &#xff0c;但是去掉DISTINCT后 成功运行 无报错 返回结果正常 但是没有了去重 SELECT DISTINCTlog.* FROMwork_log log,work_log_visi…

网络运维与网络安全 学习笔记2023.12.1

网络运维与网络安全 学习笔记 第三十二天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…

【C语言】网络字节序和主机字节序

网络字节序和主机字节序是计算机中字节的两种排序方式&#xff0c;它们主要用于解决不同计算机之间数据通信的问题。 一、网络字节序 也被称为大端字节序&#xff0c;是一种标准的字节序。在网络通信中&#xff0c;如果两台主机的字节序不同&#xff0c;可能会导致数据解释的二…

使用命令行移除VSAN中故障磁盘

原创作者&#xff1a;运维工程师 谢晋 使用命令行移除VSAN中故障磁盘 前提故障盘移除 前提 客户有套VSAN环境内有一台服务器的磁盘组出现了一块故障的数据盘&#xff0c;但该盘已经处于完全掉线状态&#xff0c;无法进行正常移除。如下图&#xff1a; 如果遇到这种情况&am…

电子眼+无人机构建平安城市视频防控监控方案

电子眼&#xff08;也称为监控摄像机&#xff09;可以通过安装在城市的不同角落&#xff0c;实时监控城市的各个地方。它们可以用于监测交通违法行为、监控公共场所的安全以及实时监测特定区域的活动情况。通过电子眼的应用&#xff0c;可以帮助警方及时发现并响应各类安全事件…

Linux文件系统与基础IO

文章目录 1 C文件接口1.1 fopen1.2 fwrite、fread、rewind、fclose 2 文件系统调用2.1 open2.1.1 参数2&#xff1a;flags2.1.2 参数3&#xff1a;mode2.1.3 返回值——file descriptor 2.2 write2.3 read2.4 close 3 文件的本质3.1 struct file3.2 一个进程如何与多个文件相关…

倒计时模块复习

经典回顾倒计时 倒计时的基本布局介绍。 一个内容区域和一个输入区域&#xff0c;内容区域进行划分 直接使用flex布局会更快一点。 js代码 我们利用一下模块化思想&#xff0c;直接把获得时间这个功能写成一个函数。方便后续的调用 function getTime() {const date new Date…

使用pytorch查看中间层特征矩阵以及卷积核参数

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 1和4是之前讲过的alexnet和resnet模型 2是分析中间层特征矩阵的脚本 3是查看卷积核参数的脚本 1设置预处理方法 和图像训练的时候用的预处理方法保持一致 2实例化模型 3载入之前的模型参数 4载入…

智能优化算法应用:基于驾驶训练算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于驾驶训练算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于驾驶训练算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.驾驶训练算法4.实验参数设定5.算法结果6.参考…

带大家做一个,易上手的家常辣子鸡

先从冰箱拿出鸡肉解冻 拿小半根葱 去掉最外面一层皮 切成小段 最备好 花椒 干辣椒 准备四五个大料 起锅烧油 这道菜需要放其他菜两到三倍的油 油温上来之后 放入干辣椒和花椒进行翻炒 等它们都烧黑之后捞出来 这样 辣味就留在油里面了 然后 倒入鸡肉 葱段 大料 然后 倒…

从0到1,手把手带你开发截图工具ScreenCap------001实现基本的截图功能

ScreenCap---Version&#xff1a;001 说明 从0到1&#xff0c;手把手带你开发windows端的截屏软件ScreenCap 当前版本&#xff1a;ScreenCap---001 支持全屏截图 支持鼠标拖动截图区域 支持拖拽截图 支持保存全屏截图 支持另存截图到其他位置 GitHub 仓库master下的Scr…

如何排查rpc mount export: RPC: Timed out问题

文章目录 问题描述查看nfs服务是否运行正常如果以上都通过,尝试下面步骤 问题描述 我们将讨论您在 NFS 客户端上看到的 NFS 错误之一的故障排除。在尝试与 NFS 相关的命令时可以看到此错误&#xff0c;如下所示&#xff1a; 通常&#xff0c;当您看到此错误时&#xff0c;您也…

整合消息队列RabbitMQ

为什么使用消息队列MQ&#xff1f; 因为使用消息队列有多个好处&#xff1a;可以实现系统服务的解耦、异步和削峰&#xff1a; 异步通信&#xff1a;消息队列提供了一种异步通信的方式&#xff0c;发送方可以将消息发送到队列中&#xff0c;然后继续执行其他任务&#xff0c;…