RocketMQ 消息集成:多类型业务消息-普通消息

引言

Apache RocketMQ 诞生至今,历经十余年大规模业务稳定性打磨,服务了 100% 阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。本篇将从业务集成场景的诉求开始,介绍 RocketMQ 作为业务消息集成方案的核心能力和优势,通过功能场景、应用案例以及最佳实践等角度介绍 RocketMQ 普通消息类型的使用。

说起业务集成场景,RocketMQ 最初的使用场景就是典型代表。RocketMQ 诞生于阿里的电商系统,电商系统经常需要做各种大促活动,在这类复杂需求场景下对消息系统的吞吐性能、端到端延迟、削峰填谷等能力有着极高的要求。

一句话概括今天的核心问题,跑在核心交易业务链路的消息有什么特点,有什么要求,和跑在离线分析等场景的消息有什么不同。下面和大家一起来探讨~

业务集成 vs 数据集成

集成目标不同

做业务核心架构设计时,很多时候需要面向上层需求去完成业务逻辑的设计。以电商交易场景为例,通过微服务的拆分,可能在整个链路中会拆成很多个环节,不同应用之间通过消息去集成时,更多的是关注用户订单的流转过程,关注这个业务逻辑是否会正常的处理,这个就是业务集成。

对比一下,数据集成是以数据为中心,更多的是关注业务集成产生的数据,去分析这些业务数据的价值。数据集成并不关心这个数据是从哪里来,只关心数据本身的属性和数据之间的关系。

关注重点不同

在业务集成里随着企业业务逻辑的拓宽和复杂度的提升,调用和被调用方之间的耦合性会逐步增加,链路的拓扑也会变得越来越复杂。经常会出现一条消息的上游是另一条消息的下游,一个服务可能既是发送方也是消费方,等等。

而在数据集成的场景里面,并不关注上述链路,更多是关注数据的多样性。也就是说,在做数据集成分析时,更多的是从各种异构的数据源里去提取、汇聚这些数据,然后把这些异构系统的数据聚合在一起做清洗,最终汇聚成结构化的数据或报表去做分析。数据集成更多是关注数据的异构性和多样性。

实时性不同

业务集成简单理解就是一种在线的逻辑,或者是一种强实时的逻辑。在这个业务集成领域,无论同步调用还是异步调用,都对调用和被调用之间的响应协同机制有一定的要求。举个例子,一个订单的处理必须是要在毫秒级完成,否则用户的体验会非常的差。

但是在数据集成领域,更多的可能是近实时甚至是离线非实时的场景,也就是说通过批、实时流或近实时流的 场景去爬取数据之后做分析,具体链路对于用户来说并不是可见的,这也是数据集成和业务集成侧重点的差异。

业务集成对消息系统的核心诉求

消息队列是企业业务集成的主要模式之一,它是一种异步通信模式。异步模式提供了低耦合、高可靠、可观测的异步通信能力。那么业务集成链路里使用消息之后会带来什么效果呢?这里稍微罗列一下。

上图就是一个比较典型的上层的应用链路,从应用 A 到下层的应用 B 的一个单链路,通过发送初始化或者结构化一个消息,作为调用事件发送到事件通道,这个通道就是消息系统,比如 RocketMQ、RabbitMQ 等。在时间通道里存储后通过过滤路由的分发组件匹配到下游,然后推送处理。与此同时,还会有可观测、运维、监控的一些体系去支撑这个链路的可靠运行。

完整的功能需求非常多,这里提炼业务集成对消息系统的四个核心诉求:

1)多类型消息传输:支持多样业务场景集成诉求,主要包括普通消息、定时消息、事务消息、顺序消息等;

2)丰富路由分发能力:支持多种分发路由条件,包括 Tag 过滤、消息属性过滤,一对多、一对一分发等;

3)多样交互模式:支持收发消息多样交互方式,支持同步、异步发送,支持主动消费、被动推送消费,支持流式应答、单条应答;

4)可观测体系:支持 Metrics、Trace、Events 分析,支持单链路、全链路轨迹追踪,支持 Metrics 分析和监控告警,支持系统运行事件、业务事件透出处理。

RocketMQ 作为非常典型的业务消息方案,正是对应上述业务集成的诉求,提供了完善的消息功能、丰富的客户端接口以及完善的可观测体系和稳定性保障机制。

接下来就开始逐步拆解 RocketMQ 的多类型消息,本篇主要介绍普通消息。

普通消息原理介绍

功能简介

在多种消息类型中,普通消息是最简单也最为重要。普通消息是 RocketMQ 的基本消息类型,提供高吞吐、扩展、低延迟、异步的通信能力。其他高级消息类型基本都是在这种普通消息类型的基础上叠加了独有的控制特性,或者是特定的使用的方式。

下面这张图就是普通消息的一个典型的拓扑,和消息队列典型场景一样,生产者发送消息,发送普通消息到服务端去存储,存储完之后,会把消息按照订阅关系的匹配,最后推送给下游的消费方去做消费。

普通消息的特点

1)原子性:消息之间没有关联关系,收发处理逻辑原子;

2)扩展性:普通消息容量、能力可扩展,支持多队列存储、水平拆分、并发消费;

3)低延迟:普通消息链路短,交互简单,状态简单,链路极简,毫秒级低延迟通信。

消息的生命周期

普通消息从初始化发送开始到最终被处理的过程中会经历多个状态和过程,而了解消息的生命周期,可以帮助我们去判断线上出现问题后如何快速定位和解决。

简单来说消息的生命周期可以抽象成五个状态:

  • 初始化:普通消息被生产者构建初始化完成,待发送到服务端的状态;
  • 待消费:消息被传输到服务端,对下游可见,等待消费者获取处理的状态;
  • 消费中:消息被消费者获取,并按照业务逻辑处理过程,此时服务端会等待消费完成,如果一定时间后没有收到消费提交的事件,消息还会重试处理;
  • 消费提交:消费者完成消息处理,并提交应答事件到服务端,服务端标记当前消息已经被处理(包括消费成功和失败)。RocketMQ默认支持所有消息保留,此时消息数据并不会立即被删除,只是逻辑标记完成,在消息被物理删除之前,消费者仍然可以回溯重新处理消息;
  • 消息删除:RocketMQ 按照消息保存时间机制滚动清理最早的消息数据,将消息从物理文件中删除。

普通消息应用场景和案例

简单的了解原理和基本介绍之后,那普通消息主要用在哪里呢?普通消息是RocketMQ应用最广泛,使用规模最大的一种消息类型,它主要集中在服务间的解耦调用,同时还有一些批量数据的采集传输等场景。

使用场景

1)微服务调用解耦

  • 异步化解耦:普通消息实现微服务异步调用,缩短业务流和响应时间。
  • 流量削峰填谷:普通消息海量堆积能力,解决流量峰值下游处理能力不足的稳定性风险。

2)实时数据传输

  • 高吞吐传输:普通消息可以实现无限水平扩展,数据传输吞吐高,解决采集上报问题。
  • 实时传输:普通消息实时传输投递,下游可以及时消费实现计算和分析。

案例介绍

1)场景简介

交易平台是买卖家在线上根据约定的契约完成钱货交换的过程涉及的系统。交易平台涉及到和支付、物流、下单、运营等多个子系统的交互大多使用 RocketMQ 普通消息做异步解耦,消息的可靠处理是电商大促保障的核心。

2)核心痛点

订单状态机复杂,需要缩短链路时间:订单生命周期长,涉及下游多个子系统流转,同步调用耗时长,用户体验差。

大促场景海量订单处理,下游压力大:大促场景订单流量大,各子系统处理能力不足导致系统崩溃。

分布式场景订单变化持久化和下游调用事务性:订单状态流转需要确保数据库状态变更和下游调用同时成功或者失败,即事务性。

快速上手收发消息

说了这么多场景和案例,直接看一下代码怎么用。

发送普通消息

发送消息的流程非常简单,但这其中需要注意以下几点:

  • 消息初始化应尽可能完整:普通消息初始化包括主题、Tag 标签、索引 Key 和负载。可以按实际情况设置完成。
  • 消息发送需要捕获结果和异常:消息发送完成需要获取响应结果,如果失败需要捕获异常并做重试处理。

消费普通消息

RocketMQ 支持的消费方式有多种,有主动获取的方式,也有被动消费监听器推送的方式。

被动消费方式只需要注册消费监听器,然后监听器内部去处理这个逻辑,最终返回消费结果。如果消费失败,希望 RocketMQ 再做重投,就要返回一个失败的结果;抛异常也是返回失败。类似于这样的结果,返回服务端就完成了整个消费的过程。

对于主动获取的方式,会更加灵活,由业务方主动调用获取消息,可以按照自己的速率和并发取消息,处理完成后,再回复 RocketMQ 服务端消费结果。

产品预告:新一代 RocketMQ 5.0 版实例

最后预告一下,阿里云消息队列 RocketMQ 版在八月份发布新版本,新版本具备更强弹性、更低成本、更易运维等特点,欢迎保持关注。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

【总结】字符串匹配: KMP 和 拓展KMP

比起ac自动机,kmp就一个next数组,理解了如何初始化next后就可以搞一些模板题了,下面是还不错的学习资料,清晰易懂,自己用的模板也来自它: http://chaoswork.com/blog/2011/06/14/kmp%E7%AE%97%E6%B3%95%E5%B0%8F%E7%BB%93/ kmp模板 next[0]-1;j-1; for(i0;i<m;) {while(j>…

最小生成树(普利姆算法、克鲁斯卡尔算法)

给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树. 求最小生成树的算法 (1) 克鲁斯卡尔算法 图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间. (2) 普里姆算法 图…

《数字化与碳中和(园区篇)》报告正式发布,助力加快推进国家“双碳”战略实施

2021年10月&#xff0c;国务院印发《2030年前碳达峰行动方案》&#xff0c;明确提出要建设绿色低碳园区&#xff0c;并选择100个具有典型代表性的城市和园区开展碳达峰试点建设&#xff0c;在政策、资金、技术等方面对试点城市和园区给予支持。此后&#xff0c;碳达峰、碳中和正…

基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设

MaxCompute产品与生态架构 MaxCompute是一个具有先进架构的Serverless云数据仓库&#xff0c;自从商业化后&#xff0c;使用的用户涉及各个行业的头部客户。在生态上需要支持主流的开源产品以及阿里云云产品。其主要包括以下几个方面&#xff1a; 数据接入生态。目前官方提供…

构建数据中台的组织架构

一、中台是一种企业架构 1.TOGAF企业架构标准 TOGAF是一套企业架构标准。企业架构是指整个公司或企业的软件和其他技术的整体观点和方法。企业架构又细分为业务架构、应用架构、数据架构、技术架构几个方向。 其中业务架构的定义是“定义业务战略和组织&#xff0c;关键业务…

源于加速,不止加速——10年沉淀,破局改变

20余年技术&#xff0c;面临破局。CDN(Content Delivery Network&#xff0c;内容分发网络) 是一个超大规模的分布式系统&#xff0c;为互联网各类App和Web站点提供动 / 静态内容、实时流媒体加速以及网络安全防护等能力。在线购物、直播、音乐、游戏、社交等等一切&#xff0c…

5分钟让你在大火的多模态领域权威榜单VQA上超越人类

ModelScope上开源了达摩院众多业界最强多模态模型&#xff0c;其中就有首超人类的多模态预训练视觉问答模型mPLUG&#xff0c;小编激动的搓搓小手&#xff0c;迫不及待的体验了一下。 一探&#xff1a;浅草才能没马蹄 市面上有好多号称“用户上手简单”&#xff0c;“一步到位…

私有化输出的服务网格我们是这样做的

介绍 微服务开发的问题 微服务架构下我们在开发中遇到的常见的问题有以下 4 个&#xff1a; 多语言问题&#xff1a;有多种编程语言&#xff0c;node.js, JAVA, GoLang…微服务需要为每种语言都维护一种中间件 SDK升级推动难&#xff1a;SDK 升级需要推动业务应用进行代码修…

技术解读:Dragonfly 基于 P2P 的智能镜像加速系统

背景 网络下载 提起网络下载领域&#xff0c;你应该首先会想到基于 TCP/IP 协议簇的 C/S 模式。这种模式希望每一个客户机都与服务器建立 TCP 连接&#xff0c;服务器轮询监听 TCP 连接并依次响应&#xff0c;如下图&#xff1a; 上世纪末期&#xff0c;基于 C/S 模式的思想&…

Kruise Rollout:灵活可插拔的渐进式发布框架

前言 Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架。Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布&#xff0c;以及发布过程能够基于 Prometheus Metrics 指标自动化分批与暂停&#xff0c;并提供旁路的无感对接、兼容已有的多…

最小生成树的Prime算法的思想

Prime算法的核心步骤是&#xff1a;在带权连通图中V是包含所有顶点的集合&#xff0c; U已经在最小生成树中的节点&#xff0c;从图中任意某一顶点v开始&#xff0c;此时集合U{v}&#xff0c;重复执行下述操作&#xff1a;在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边…

一线技术人应该关注的四种思维能力

引言 作为长期奋战在一线的技术人&#xff0c;我深刻体会到如下几个思维能力对技术人成长的重要性&#xff0c;熟练运用这几种思维可以帮助我们快速的进入到新的领域&#xff0c;在分析、定位和解决问题上有很大帮助。 抽象思维&#xff1a;帮助我们快速抽取面对问题的关键要素…

Nacos 企业版如何提升读写性能和可观测性

概述 微服务引擎 MSE 发布 2.0.4.0 版本&#xff0c;新版本主要在性能和可观测能力升大幅提升&#xff0c;也加固了安全性。性能方面&#xff0c;基于 Dragonwell 进行构建&#xff0c;服务发现和配置性能提升达 40%以上&#xff1b;可观测方面&#xff0c;提供了服务注册的轨…

「技术人生」第9篇:如何设定业务目标

写在前面 上一篇文章讲了如何构建业务大图&#xff0c;看到有评论说这和设定 OKR 差不多啊。希望其他读者不要被类似的看法带偏。业务大图是业务顶层设计&#xff0c;是战略目标、业务长期价值、业务维度拆分、业务组织设计、业务长期发展方向、关键业务战役、短期重点事项的综…

我们总结了 3 大使用建议,并首次公开 Nacos3.0 规划图

Nacos 是什么 Nacos 是 Dynamic Naming and Configuration-Service 的首字母简称&#xff0c;定位于一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。从 2018 年 7 月开始宣布开源以来&#xff0c;已经走过了第四个年头&#xff0c;在这四年里&#xff0c;备…

容斥原理 和 欧拉函数

在概率论中&#xff0c;对于概率空间中的事件A1&#xff0c;……&#xff0c;An&#xff0c;当n 2时容斥原理的公式为&#xff1a; 当n 3时&#xff0c;公式为&#xff1a; 一般地&#xff1a; 正数n的唯一素因子分解式p1^a1 * p2^a2 * p3^a3 ……* pk^ak 。求1&#xff0c;2…

Dubbo 3 StateRouter:下一代微服务高效流量路由

目前的微服务架构中&#xff0c;通常包含服务消费者、服务提供者、注册中心、服务治理四元素&#xff0c;其中服务消费者会向注册中心获取服务提供者的地址列表&#xff0c;并根据路由策略选出需要调用的目标服务提供者地址列表&#xff0c;最后根据负载算法直接调用提供者。当…

首次全面解析云原生成熟度模型:解决企业「诊断难、规划难、选型难」问题

从“上云”到“云上”原生&#xff0c;云原生提供了最优用云路径&#xff0c;云原生的技术价值已被广泛认可。当前行业用户全面转型云原生已是大势所趋&#xff0c;用户侧云原生平台建设和应用云原生化改造进程正在加速。 然而&#xff0c;云原生复杂的技术栈和传统IT的历史包…

有效预警6要素:亿级调用量的阿里云弹性计算SRE实践

编者按&#xff1a;随着分布式系统和业务需求的飞速发展&#xff0c;监控告警在我们保障系统稳定性和事故快速恢复的全周期中都是至关重要的。9月3号&#xff0c;阿里云弹性计算管控SRE李成武老师(花名佐井)&#xff0c;受「TakinTalks稳定性社区」邀请&#xff0c;在线分享日常…

EMR 重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器

大数据运维的挑战—如何保证集群稳定与运行效率 企业级大数据集群通常拥有海量的数据存储、日常运算成干上万的计算任务&#xff0c;需要满足各类上层业务的计算需求。对于这类集群的运维往往充满着挑战&#xff1a;海量的数据、庞杂的组件以及组件之间复杂的依赖关系、对于时…