RocketMQ 在业务消息场景的优势详解

这篇具有很好参考价值的文章主要介绍了RocketMQ 在业务消息场景的优势详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:隆基

01 消息场景

RocketMQ 5.0 是消息事件流一体的实时数据处理平台,是业务消息领域的事实标准,很多互联网公司在业务消息场景会使用 RocketMQ。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

我们反复提到的“消息、业务消息”,指的是分布式应用解耦,是 RocketMQ 的业务基本盘。通过本文,我们将深入了解 RocketMQ 5.0 在业务消息场景的优势能力,了解为什么 RocketMQ 能够成为业务消息领域的事实标准。

RocketMQ 在业务消息领域的经典场景是应用解耦,这也是 RocketMQ 诞生初期解决阿里电商分布式互联网架构的核心场景,主要承担分布式应用(微服务)的异步集成,达到应用解耦的效果。解耦是所有的软件架构最重要的追求。

分布式应用(微服务)采用同步 RPC 与异步消息的对比。比如在业务系统中,有三个上游应用与 4 个下游应用,采用同步 RPC 的方式,会有 3*4 的依赖复杂度;而采用异步消息的方式则可以化繁为简,简化为 3+4 的依赖复杂度,从乘法简化为加法。

通过引入消息队列实现应用的异步集成可以获得四大解耦优势。

  • 代码解耦

极大提升业务敏捷度。如果用同步调用的方式,每次扩展业务逻辑都需要上游应用显式调用下游应用接口,代码直接耦合,上游应用要做变更发布,业务迭代互相掣肘。而通过使用消息队列扩展新的业务逻辑,只需要增加下游应用订阅某个 Topic,上下游应用互相透明,业务可以保持灵活独立快速迭代。

  • 延迟解耦

如果使用同步调用的方式,随着业务逻辑的增加,用户操作的远程调用次数会越来越多,业务响应越来越慢,性能衰减,业务发展不可持续。而使用消息队列,无论增加多少业务,上游应用只需调用一次消息队列的发送接口即可响应线上用户,延迟为常量,基本在 5ms 以内。

  • 可用性解耦

如果使用同步调用的方式,任何下游业务不可用都会导致整个链路失败。该种结构下类似于串联电路,甚至在部分调用失败的情况下,还会出现状态不一致。而采用 RocketMQ 进行异步集成,只要 RocketMQ 服务可用,用户的业务操作便可用。RocketMQ 服务通过多对主备组成的 broker 集群提供,只要有一对主备可用,则整体服务可用,作为基础软件,可用性远大于普通的业务应用,下游应用的业务推进都可以通过 MQ 的可靠消息投递来达成。

  • 流量解耦

即削峰填谷。如果采用同步调用的方式,上下游的容量必须对齐,否则会出现级联不可用。容量完全对齐需要投入大量精力进行全链路压测与更多机器成本。而通过引入 RocketMQ,基于 RocketMQ 亿级消息的堆积能力,对于实时性要求不高的下游业务,可以尽最大努力消费,既保证了系统稳定性,又降低了机器成本与研发运维成本。

02 基础特性

阿里的交易应用流程为:用户在淘宝上下单时会调用交易应用创建订单,交易应用将订单落到数据库,然后生产一条订单创建的消息到 RocketMQ,返回给终端用户订单创建成功的接口。完成的交易流程推进则是依赖 RocketMQ 将订单创建消息投递给下游应用,会员应用收到订单消息,需要给买家赠送积分、淘金币,触发用户激励相关的业务。购物车应用则是负责删除在购物车里面的商品,避免用户重复购买。同时,支付系统与物流系统也都会基于订单状态的变更,推进支付环节与履约环节。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

过去十年多年,阿里电商业务持续蓬勃发展,交易的下游应用已达数百个,并且还在不断增加。基于 RocketMQ 的电商架构极大提高了阿里电商业务的敏捷度,上游核心的交易系统完全无需关心哪些应用在订阅交易消息,交易应用的延迟与可用性也一直保持在很高水准,只依赖少量的核心系统与 RocketMQ,不会受数百个下游应用的影响。

交易的下游业务类型不一,有大量的业务场景不需要实时消费交易数据,比如物流场景能容忍一定的延迟。通过 RocketMQ 的亿级堆积能力,极大降低了机器成本。RocketMQ 的 shared-nothing 架构具备无限横向扩展的能力,已经连续 10 年支撑了高速增长的双十一消息峰值,在几年前达到亿级 TPS。

03 增强能力

经典场景下,RocketMQ 相对于其他消息队列,拥有诸多差异化优势与增强。

首先,稳定性方面,稳定性交易是金融场景最重要的需求。 RocketMQ 的稳定性不仅限于高可用架构,而是通过全方位的产品能力来构建稳定性竞争力。比如重试队列,当下游消费者因为业务数据不 ready 或其他原因导致某条消息消费失败,RocketMQ 不会因此阻塞消费,而是能将此消息加入到重试队列,然后按时间衰减重试。如果某条消息因为某些因素经过十几次重试始终无法消费成功,则 RocketMQ 会将它转到死信队列,用户可以通过其他手段来处理失败的消息,是金融行业的刚需。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

同时,消费成功后如果因为代码 bug 导致业务不符合预期,应用可以对业务 bug 进行修复并重新发布,然后应用消息回溯的功能将消息拉回到之前的时间点,让业务按照正确逻辑重新处理。

RocketMQ 的消费实现机制采用自适应拉模式的消费,在极端的场景下能够避免消费者被大流量打垮。同时,在消费者的 SDK 里,做了缓存本地的消息数量与消息内存占用的阈值保护,防止消费应用的内存风险。

其次,RocketMQ 还具备优秀的可观测能力,是稳定性的重要辅助手段。 RocketMQ 是业界第一个提供消息消息级别可观测能力的消息队列,每条消息都可以带上业务主键,比如在交易场景,用户可以将订单 ID 作为消息的业务主键。当某个订单的业务需要排查,用户可以基于订单 ID 查询该条消息的生成时间以及消息内容。消息的可观测数据还能继续下钻,通过消息轨迹查看消息由哪台生产者机器发送、由哪些消费者机器在什么时间消费、消费状态是成功或失败等。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生
RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

除此之外,它支持了几十种核心的度量数据, 包括集群生产者流量分布、慢消费者排行、消费的平均延迟、消费堆积数量、消费成功率等。基于丰富的指标,用户可以搭建更加完善的监控报警体系来进一步加固稳定性。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生
RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

为了支撑更灵活的应用架构,RocketMQ 在生产与消费等关键接口提供了多种模式。

生产者接口 RocketMQ 同时提供了同步发送接口与异步发送接口。同步发送是最常用的模式,业务流程的编排是串行的,在应用发完消息、Broker 完成存储后返回成功后,应用再执行下一步逻辑。然而在某些场景下,完成业务涉及多个远程调用,应用为了进一步降低延迟、提高性能,会采用全异步化的方式,并发发出远程调用(可以是多次发消息或 RPC 的组合),异步收集结果推,进业务逻辑。

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

消费者的接口方面也提供了两种方式:

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

  • 监听器模式被动消费

这是目前使用最广泛的方式,用户无需关心客户端何时去 Broker 拉取消息,何时向 Broker 发出消费成功的确认,也无需维护消费线程池、本地消息缓存等细节。只需要写一段消息监听器的业务逻辑,根据业务执行结果返回 Success 或 Failure。它属于全托管的模式,用户可以专注于业务逻辑的编写,而将实现细节完全委托给 RocketMQ 客户端。

  • 主动消费模式

将更多的自主权交给用户,也称为 Simple Consumer。在该种模式下,用户可以自己决定何时去 Broker 读取消息、何时发起消费确认消息。对业务逻辑的执行线程也有自主可控性,读取完消息后,可以将消费逻辑放在自定义的线程池执行。在某些场景下,不同消息的处理时长与优先级会有所不同,采用 Simple Consumer 的模式,用户可根据消息的属性、大小做二次分发,隔离到不同的业务线程池执行处理。该模式还提供了消息粒度消费超时时间的设定能力,针对某些消费耗时长的消息,用户能够调用 change Invisible Duration 接口,延长消费时间,避免超时重试。

04 总结

  • 消息经典场景:应用解耦;

RocketMQ 在业务消息场景的优势详解,rocketmq,阿里云,云原生

  • RocketMQ 基础特性:发布订阅、可靠消息、亿级堆积、无限扩展;
  • 业务消息场景的增强能力:稳定性、可观测、多样化接口。

RocketMQ 学习社区体验地址

RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码。RocketMQ 学习社区是国内首个基于 AIGC 提供的知识服务社区,旨在成为 RocketMQ 学习路上的“贴身小二”。

PS:RocketMQ 社区以 RocketMQ 5.0 资料为主要训练内容,持续优化迭代中,回答内容均由人工智能模型生成,其准确性和完整性无法保证,且不代表 RocketMQ 学习社区的态度或观点。

立即体验 RocketMQ 学习社区(建议 PC 端体验完整功能)

https://rocketmq-learning.com/

【活动】一键体验 RocketMQ 六大生产环境

免费试用+30 秒一键体验,低门槛、快速、高效、易操作,带你了解“历经万亿级数据洪峰考验”的云消息队列 RocketMQ!

点击此处,立即参与活动!文章来源地址https://www.toymoban.com/news/detail-622224.html

到了这里,关于RocketMQ 在业务消息场景的优势详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java实现阿里云rocketMQ消息的发送与消费(tcp协议sdk)

    登录阿里云官网,先申请rocketMQ,再申请Topic、Group ID,然后就是参考阿里云的JAVA SDK进行编程实现。 环境要求: 安装JDK 1.8或以上版本 安装Maven 安装Java SDK 参照 阿里云 官方文档,来一步一步操作。 文档提供的SDK有 TCP 和Http协议,这里使用 TCP协议 来实现rocketMQ消息的发送与消

    2024年02月07日
    浏览(34)
  • 分布式消息队列RocketMQ概念详解

    目录 1.MQ概述 1.1 RocketMQ简介 1.2 MQ用途 1.3 常见MQ产品 2.RocketMQ 基本概念 2.1 消息 2.2 主题 2.3 标签 2.4 队列  2.5 Producer 2.6 Consumer 2.7 NameServer 2.8 Broker 2.9 RocketMQ 工作流程   RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现,是一套提供了消息

    2024年02月03日
    浏览(48)
  • 【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka

    作者简介 前言 博主之前写过一个完整的MQ系列,包含RabbitMQ、RocketMQ、Kafka,从安装使用到底层机制、原理。专栏地址: https://blog.csdn.net/joker_zjn/category_12142400.html?spm=1001.2014.3001.5482 本文是该系列的清单综述,会拉通来聊一下三大MQ的特点和各种适合的场景。 目录 1.概述 1.1.M

    2024年02月09日
    浏览(42)
  • 【RocketMQ】RocketMQ标签、过滤及消息重复消费

    参考文档: 官方文档 Topic 与 Tag 都是业务上用来归类的标识,区别在于 Topic 是一级分类,而 Tag 可以理解为是二级分类。使用 Tag 可以实现对 Topic 中的消息进行过滤。 注: Topic:消息主题,通过 Topic 对不同的业务消息进行分类。 Tag:消息标签,用来进一步区分某个 Topic 下

    2024年02月07日
    浏览(32)
  • rocketMq消息队列原生api使用以及rocketMq整合springboot

    使用RocketMQ的原生API开发是最简单也是目前看来最牢靠的方式。这里用SpringBoot来搭建一系列消息生产者和消息消费者,来访问之前搭建的RocketMQ集群。 首先创建一个基于Maven的SpringBoot工程,引入如下依赖: RocketMQ的官网上有很多经典的测试代码,这些代码虽然依赖的版本比较

    2024年02月12日
    浏览(34)
  • RocketMQ 发送批量消息、过滤消息和事务消息

    前面我们知道RocketMQ 发送延时消息与顺序消息,现在我们看下怎么发送批量消息、过滤消息和事务消息。 限制是这些批量消息应该有相同的 topic,相同的 waitStoreMsgOK,而且不能是延时消息。 此外,这一批消息的总大小不应超过4MB。 消息的生产者 消息的消费者 消息分割 如果

    2023年04月21日
    浏览(37)
  • Springbootg整合RocketMQ ——使用 rocketmq-spring-boot-starter 来配置发送和消费 RocketMQ 消息

           本文解析将 RocketMQ Client 端集成为 spring-boot-starter 框架的开发细节,然后通过一个简单的示例来一步一步的讲解如何使用这个 spring-boot-starter 工具包来配置,发送和消费 RocketMQ 消息。 添加maven依赖: 修改application.properties 注意: 请将上述示例配置中的 127.0.0.1:9876 替换

    2024年03月22日
    浏览(31)
  • RocketMQ发送消息超时异常

    说明:在使用RocketMQ发送消息时,出现下面这个异常(org.springframework.messging.MessgingException:sendDefaultImpl call timeout……); 解决:修改RocketMQ中broke.conf配置,添加下面这两行配置,重启服务后再试就可以了; 启动时,注意使用下面的命令,带上配置文件

    2024年02月13日
    浏览(34)
  • RocketMQ(消息中间件)

    目录 一、为什么会出现消息中间件? 二、消息中间件是干嘛的? 三、应用解耦 四、流量削峰 五、异步处理 1.串行方式: 2.并行方式: 3.引入消息队列:  六、RocketMQ的架构及概念 Http请求默认采用同步请求方式,基于请求与响应模式,在客户端与服务器进行通讯 时,客户端

    2024年02月10日
    浏览(35)
  • RocketMQ发送消息失败排查

    错误信息: 错误截图: 查看结果: 说明:发现对应的订阅组已经离线(查看对应的项目MQ地址和配置都是正确的),然后从服务日志中也看不出更多的问题 说明:调整服务日志级别到info,通过详细的日志信息定位发送失败的原因 日志截图: 说明:日志不断打印 closeChanne

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包