消息队列入门(一)关于消息队列

简介: 消息是指在两个独立的系统间传递的数据,这两个系统可以是两台计算机,也可以是两个进程。 消息可以非常简单,可以是简单的字符串,也可以是保存了数据持久化的各种类型的文档集合。 队列是在消息的传输过程中的通道,是保存消息的容器,根据不同的情形,可以有先进先出,优先级队列等区别 。

1.什么是消息队列

消息是指在两个独立的系统间传递的数据,这两个系统可以是两台计算机,也可以是两个进程。

消息可以非常简单,可以是简单的字符串,也可以是保存了数据持久化的各种类型的文档集合。

队列是在消息的传输过程中的通道,是保存消息的容器,根据不同的情形,可以有先进先出,优先级队列等区别 。


2.为什么使用消息队列

个人觉得消息队列主要的意义是解耦和异步处理,以及在高并发场景下平滑短时间内大量的服务请求

消息队列不仅被用于系统内部组件之间的通信,同时也被用于系统跟其它服务之间的交互

消息队列的使用可以增加系统的可扩展性、灵活性和用户体验

非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。

而基于消息队列可以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

消息队列能够将业务逻辑解耦,调用方只需要下达命令而不用等待整个逻辑执行完毕。除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑。


使用消息队列的 10 个理由

1. 解耦
在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

2. 冗余
有时在处理数据的时候处理过程会失败。除非数据被持久化,否则将永远丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在被许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理过程明确的指出该消息已经被处理完毕,确保你的数据被安全的保存直到你使用完毕。

3. 扩展性
因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的;只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。

4. 灵活性 & 峰值处理能力
当你的应用上了Hacker News的首页,你将发现访问流量攀升到一个不同寻常的水平。在访问量剧增的情况下,你的应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。请查看我们关于峰值处理能力的博客文章了解更多此方面的信息。

5. 可恢复性
当体系的一部分组件失效,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。而这种允许重试或者延后处理请求的能力通常是造就一个略感不便的用户和一个沮丧透顶的用户之间的区别。

6. 送达保证
消息队列提供的冗余机制保证了消息能被实际的处理,只要一个进程读取了该队列即可。

7.排序保证
在许多情况下,数据处理的顺序都很重要。消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。

8.缓冲

在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行--写入队列的处理会尽可能的快速,而不受从队列读的预备处理的约束。该缓冲有助于控制和优化数据流经过系统的速度。

9. 理解数据流
在一个分布式系统里,要得到一个关于用户操作会用多长时间及其原因的总体印象,是个巨大的挑战。消息系列通过消息被处理的频率,来方便的辅助确定那些表现不佳的处理过程或领域,这些地方的数据流都不够优化。

10. 异步通信

很多时候,你不想也不需要立即处理消息。消息队列提供了异步处理机制,允许你把一个消息放入队列,但并不立即处理它。你想向队列中放入多少消息就放多少,然后在你乐意的时候再去处理它们。

 


目录
相关文章
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
26362 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
存储 消息中间件 负载均衡
深入理解RocketMQ广播消费
这篇文章我们聊聊广播消费,因为广播消费在某些场景下真的有奇效。笔者会从基础概念、实现机制、实战案例、注意事项四个方面一一展开,希望能帮助到大家。
深入理解RocketMQ广播消费
|
21天前
|
存储 弹性计算 人工智能
阿里云轻量应用服务器38元、68元和9.9元、199元购买和使用问题解答:用户关心的各种问题集锦
2026年阿里云推出轻量应用服务器抢购活动,提供2核2G(38元/年,新用户68元/年)和2核4G(9.9元/月,199元/年)两种配置,分别适用于个人网站、博客开发测试及AI助理等场景。活动每天10:00和15:00开抢,库存有限。本文为大家梳理了关于这两款热门阿里云轻量应用服务器的购买与使用指南。
|
20天前
|
前端开发 开发工具 C++
VSCode下载 | Visual Studio Code免费安装使用保姆级教程(新手必看)
VSCode是微软开发的免费开源代码编辑器,支持Windows/macOS/Linux,集代码编辑、调试、Git集成于一体。其强大扩展生态(数万插件)、轻量快速、跨平台及中文支持,使其成为开发者首选。本文提供完整下载、安装、汉化与高效插件配置指南。(239字)
|
7月前
|
存储 人工智能 API
Qoder 正式开放订阅,Credits 耐用度提升1/3
Qoder 自 2025 年 8 月 21 日公测以来,以最强的上下文工程能力以及 Repo Wiki、Quest Mode 等广受好评的产品功能,收获了全球开发者的支持和喜爱。今天,Qoder 面向全球用户正式推出付费订阅计划,助力开发者开启高效流畅的编程之旅。
|
3月前
|
数据采集 安全 测试技术
代理IP从哪里获取?有什么不同?
代理IP来源决定质量与合规性,获取途径影响便捷与风险。数据中心IP性价比高但易被封;住宅IP隐匿性强却成本高;机房拨号IP兼具稳定与隐蔽。正规途径首选专业服务商,次选云平台API、自建服务器,免费代理慎用。认清差异,按需选择,规避风险。
代理IP从哪里获取?有什么不同?
|
存储 传感器 数据库连接
《深度剖析鸿蒙系统应用生命周期管理与优化策略》
鸿蒙系统应用开发中,生命周期管理是核心。它涵盖应用从启动到销毁的全过程,包括启动初始化(如Ability创建与资源加载)、前台后台切换(状态保存与资源释放)及停止销毁阶段(清理资源)。开发者可通过精准加载释放资源、建立状态保存恢复机制、管理多线程异步操作及应对设备配置变化等策略优化性能。以电商应用为例,合理管理各阶段任务可提升用户体验,推动鸿蒙生态发展。
671 0
|
12月前
|
人工智能 运维 开发工具
产品动态丨阿里云计算巢月刊-2025年第3期
让优秀的企业软件生于云、长于云
|
9月前
|
供应链 前端开发 JavaScript
如何开发采购供应链管理系统中的经营管理看板(附架构图+流程图+代码参考)
采购供应链管理系统中的经营管理看板,通过数据可视化帮助企业管理关键指标,如库存、供应商表现、财务状况等。它提升决策效率,确保供应链透明高效。本文详解其架构设计、模块开发与实现技巧,助力企业打造定制化看板系统。
|
消息中间件 存储 弹性计算
消息队列详解与应用
消息队列详解与应用
466 0