RocketMQ 多语言 SDK 开源贡献召集令

news2024/10/6 14:31:02

作者:艾阳坤

目前 Apache RocketMQ 5.0 SDK [ 1] 正在社区开源,开发与迭代也在火热进行中,欢迎广大社区的朋友们能够参与其中。我们欢迎任何形式的贡献,包括但不限于新 feature、bugfix、代码优化、生态集成、测试工作、文档撰写。更加欢迎能够认领一个完整的特定语言实现的同学,踏出第一步,你就是 contributor!更有惊喜礼品和成为 committer 的机会等着你!

写在前面

Apache RocketMQ 是由阿里巴巴集团捐赠给 Apache 开源基金会的一款低延迟、高并发、高可用、高可靠的分布式消息中间件,并于 2017 年正式从 Apache 社区毕业,成为 Apache 顶级项目(TLP)。也是国内首个非 Hadoop 生态体系的互联网中间件顶级项目。

面向过去,RocketMQ 经过多年淘宝双十一的洗礼和考验,赢得了诸多客户的认可和青睐。面向未来,RocketMQ 历久弥新,为了更好地迎接云原生时代的来临,基于存算分离架构的 RocketMQ 5.0 应运而生。

在这里插入图片描述

RocketMQ 5.0 中引入了全新的无状态 Proxy 组件,在水平拓展,故障应急,多协议等方面都进行了诸多支持与改进(关于 RocketMQ 5.0 的详细介绍,欢迎关注 **Rocketmq 官网 [ 2] **)。同时也为接下来多语言客户端的实现打下了良好基础。

新的多语言SDK

RocketMQ 5.0 客户端相比较于 4.x 的版本进行了诸多改进,会是未来社区客户端演进的主流方向。RocketMQ 4.x SDK 的多语言支持并不完美,协议的较高复杂度和语言绑定的实现细节使得多语言的支持与维护都变得棘手,而用户对多语言的诉求是强烈的。值此契机,RocketMQ 5.0 基于 gRPC 正式推出了全新的多语言 SDK。

在这里插入图片描述

相比较于 RocketMQ 4.x 的 SDK。RocketMQ 5.0 展现出了一副全新的面貌:

  • 采用全新极简的,immutable 的 API 设计,使得 API 上手更简单,跨语言的对齐也变得更加简单;
  • 完善的错误处理体系和错误码设计,开发者和用户对错误的处理可以更加得心应手;
  • 在 PushConsumer/PullConsumer 之外新推出无状态 SimpleConsumer,实现逻辑轻量,用户可以自行管理消费侧消息的接收与应答,同时也对有更多定制化需求的客户提供了便利。
  • 实现轻量化,代码量相比较旧有实现缩减 3/4 以上,开发和维护的成本更低;
  • 标准化的 logging/tracing/metrics 输出,降低实现复杂度的同时,可观测性的提升会使得生产环境下的问题更容易被捕捉;

gRPC 多语言特性,为 RocketMQ 5.0 客户端的多语言实现提供了支撑。RocketMQ 全新的客户端的协议层被替换,语言无关的 IDL 使得协议的维护和实现都更为极为简单。同时得益于 gRPC 强大的生态体系,使得 RocketMQ 与周边的集成也变得更为简便。

在这里插入图片描述

RocketMQ 5.0 中引入了新的的 pop 消费,创造性地在原生的队列模型之上支持了这种无状态的消费模式。不同于原始的更适用于流场景的队列模型,pop 机制更面向于业务消息的场景,使得开发者和用户可以只关心消息本身,可以通过「SimpleConsumer」提供单条消息级别的接受/重试/修改不可见时间以及删除等 API 能力。

Roadmap

目前 5.0 多语言 SDK 的 Java/C++ 已经有了相对比较完整的实现。

Go/C# 已经提供了基础的 Producer/SimpleConsumer 的实现,其余的语言实现(PHP/Python/JavaScript/Rust 等)还在社区进行中,欢迎大家广泛参与。

在这里插入图片描述

对于一个从零开始的特定语言实现,一个大概的步骤如下:

  • 部署 rocketmq-namesrv [ 3] 和 **rocketmq-proxy [ 4] **方便与客户端进行调试,为降低部署成本,rocketmq-proxy 可以采用 LOCAL 模式进行部署。
  • 熟悉 rocketmq-apis中的 IDL,适配新的 gRPC/Protobuf 协议:IDL 中描述了 5.0 SDK 中的语言无关的协议描述,通过 gRPC protoc 工具自动生成协议层代码。
  • 应用新的 API 规范和设计:可以参考 **Java 的 API 设计 [ 5] **,总体指导思想是不可变性且行为明确。
  • 实现 Producer/SimpleConsumer:Producer 提供最基本的四种不同类型消息的发送功能(普通/顺序/定时/事务),SimpleConsumer 提供基于 pop 语义的无状态消息接受/重试/修改不可见时间等能力。
  • 统一的错误处理体系:由服务端产生的异常与错误均有完善的异常错误码和异常信息,各个语言实现需要以最适合的方式暴露给客户。
  • 实现 PushConsumer:RocketMQ 4.x 中最为常用的消费者类型,用户侧只需要明确订阅关系和定义消息监听器行为即可,客户端实现中需要自动帮用户从远端获取消息。
  • 客户端全方位可观测性:规范的日志输出,实现基于 OpenTelemetry/OpenCensus 的客户端 metrics 体系。

按照以上流程开发者在开发过程中出现的任何问题,都欢迎以 issue/pull request 的形式反馈到社区。

如何参与贡献

我们欢迎任何形式的贡献,包括且不限于新 feature、bugfix、代码优化、生态集成、测试工作、文档撰写。更加欢迎能够认领一个完整的特定语言实现的同学!不要犹豫,欢迎大家以 issue/pull request 的形式将你的想法反馈到社区,一起来建设更好的 RocketMQ!

在这里插入图片描述

相关资料

rocketmq-clients: RocketMQ 5.0 多语言客户端实现

https://github.com/apache/rocketmq-clients

rocketmq: RocketMQ 主仓库(内置 5.0 proxy 实现)

https://github.com/apache/rocketmq

rocketmq-apis: RocketMQ 5.0 协议具体定义

https://github.com/apache/rocketmq-apis

《RIP-37: RocketMQ 全新统一 API 设计》

https://shimo.im/docs/m5kv92OeRRU8olqX

《RIP-39: RocketMQ gRPC 协议支持》

https://shimo.im/docs/gXqmeEPYgdUw5bqo

相关链接

[1] Apache RocketMQ 5.0 SDK

https://github.com/apache/rocketmq-clients

[2] rocketmq 官网

https://rocketmq.apache.org/docs/

[3] rocketmq-namesrv

https://github.com/apache/rocketmq/tree/develop/namesrv

[4] rocketmq-proxy

https://github.com/apache/rocketmq/tree/develop/proxy

[5] Java 的 API 设计

https://github.com/apache/rocketmq-clients/tree/master/java/client-apis

点击此处,参考完整的贡献流程。

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

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

相关文章

我与 CSDN 的 2022 年终总结

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 转眼间2023年已经过去…

《后端技术面试 38 讲》学习笔记 Day 02

《后端技术面试 38 讲》学习笔记 Day 02 08丨软件设计的方法论:软件为什么要建模? 原文摘抄 所谓软件建模,就是为要开发的软件建造模型。模型是对客观存在的抽象,我们常说的数学建模,就是用数学公式作为模型&#xf…

flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 bootstrap jinja 模版 三、菜鸟实战 初始化 Flask 框架,设置路由 各行政区房屋数量柱状图分析 区域二手房房源朝向分布情况 二手房单价最…

Higress Kruise Rollout: 渐进式交付为应用发布保驾护航

作者:扬少 前言 在业务高速发展过程中,如何最大化保障功能迭代过程中业务流量无损一直是开发者比较关心的问题。通常在应用发布新功能阶段,我们会采用灰度发布的思想对新版本进行小流量验证,在符合预期之后再进行全量发布&#…

11、JS笔记-内置对象

1.内置对象 js中对象分为三种: 自定义对象、内置对象、浏览器对象(js独有) 内置对象: js语言自带的对象,供开发者使用,提供一些常用或基本的功能(属性和方法) 2.Math对象 Math中所…

【云原生】k8s配置资源管理

内容预知 1.Secret的资源配置 1.1 Secret配置的相关说明 1.2 陈述式创建Secret配置 1.3 声明式base64编码创建Secret 1.4 将secret以volume形式挂载到pod中 1.5 将Secret导入到pod中,充当环境变量 1.6 实战运用:使用secret配置免密交互拉取habor…

Qt之对话框

文章目录一、对话框的概念二、与QWidget的区别三、对话框2种显示方法四、对话框返回值的概念本节示例提示:以下是本篇文章正文内容,下面案例可供参考 一、对话框的概念 对话框是和用户简短交互的一种窗口。如:登录界面,关于界面…

知识付费图文音视频课程公众号系统开发

知识付费图文音视频课程公众号系统开发 功能特性;为你介绍音视频课程点播系统的功能特性。 微信H5;目前只支持微信公众号H5访问。 课程管理;后台可上传多个课程分类与课程。 名师推荐;后台可以维护教师列表,并推荐到首页显示。 分享海报;可以自定义多个分享海报。 …

Maven在项目里的具体使用方式,很简单

大家好,今天给大家分享一下Maven在项目里的*具体使用方式* 有关于maven这个东西,要知道,它的作用是帮助开发人员(也就是我们)批量的管理jar包 所谓对jar包批量管理,有一个很重要的点, 就是对于…

2022年CSDN年终总结:一个新晋研究生的遗憾与成长

目录0 遗憾1 顺利完成毕业设计2 转向垂类写作3 C站成长4 组织社区活动5 新年新flag0 遗憾 2022年有很多遗憾 其一,毕业的遗憾。3月疫情席卷上海,封校封寝、静态网格,每天从上床到下桌两点一线,5月窗口期身着防护服撤离上海&…

云原生|kubernetes|pod或容器的安全上下文配置解析

前言: 安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。 安全上下文包括但不限于: 自主访问控制(Discretionary Access Control): 基于用户 ID(UID&…

【PAT甲级 - C++题解】1091 Acute Stroke

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:PAT题解集合 📝原题地址:题目详情 - 1091 Acute Stroke (pintia.cn) 🔑中文翻译:急性中风 📣专栏…

SAP灵活工作流Inbox收件箱数据展示

目录 任务说明展示流程内容 使用增强添加文本展示流程内容 自定义页面展示 任务说明展示流程内容 维护审批任务说明页签下的任务说明,支持多语种,支持使用变量; 变量只能使用容器中定义的变量,因此需要将要展示的数据绑定传输到…

【包装机】(队列+栈)

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品&#x…

C++动态链接库的使用

目录一 创建Windows动态链接库二 导出和查看DLL中的函数三 隐式链接方式加载DLL四 动态库和测试程序共用一份头文件五 从DLL中导出C类六 解决名称改编七 显式加载方式加载DLL一 创建Windows动态链接库 新建项目,选择Windows桌面向导,命名项目名称为Dll1…

GPDB中gp_vmem_protect_limit参数的意义

gp_vmem_protect_limit参数的意义1、gp_vmem_protect_limit参数说明1)在启用了基于资源队列的资源管理系统时,gp_vmem_protect_limit参数表示每个segment分配到的内存大小。预估值计算方式:所有GP数据库进程可用内存大小/发生故障时最大的primary segmen…

最优控制学习笔记2----泛函

文章目录泛函泛函定义泛函的变分自变量的变分泛函相近泛函距离泛函的连续性线性泛函泛函的变分泛函的极值泛函极值的定义泛函的极值泛函极值条件泛函 泛函定义 对于某一类函数集合{x(t)}\{x(t)\}{x(t)} 中的每一个函数 x(t)x(t)x(t), 在映射关系 JJJ 下均有一个确定的数与之对…

100天精通Python(数据分析篇)——第71天:Pandas文本数据处理方法之str/object类型转换、大小写转换、文本对齐、获取长度、出现次数、编码

文章目录每篇前言1. 文本数据类型介绍1)类型介绍2)类型转换3)类型区别区别1:统计字符串时区别2:检查字符串时2. Python字符串内置方法1) 大小写转换2) 文本对齐3)获取长度4)获取出现次数5&#…

js 右键弹出自定义菜单

演示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>*{margin…

Node.JS(2)--使用node执行js文件

目录 知识回顾 CommentJS规范 ECMAScript标准规范 模块化 CommonJS规范 模块化 知识回顾 I/O (Input/output) I/O操作指的是对磁盘的读写操作 Node Node是对ES标准一个实现&#xff0c;Node也是一个JS引擎通过Node可以使js代码在服务器端执行Node仅仅对ES标准进行了实…