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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
云原生网关 MSE Higress,422元/月
简介: 我们欢迎任何形式的贡献,包括且不限于新 feature、bugfix、代码优化、生态集成、测试工作、文档撰写。更加欢迎能够认领一个完整的特定语言实现的同学!不要犹豫,欢迎大家以 issue/pull request 的形式将你的想法反馈到社区,一起来建设更好的 RocketMQ!

作者:艾阳坤


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


写在前面


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


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


1.png


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


新的多语言SDK


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


2.png


相比较于 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 与周边的集成也变得更为简便。


3.png


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


Roadmap


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


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


4.png


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


  • 部署 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!


5.png


相关资料


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


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

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 自然语言处理 Cloud Native
RocketMQ 多语言 SDK 开源贡献召集令
我们欢迎任何形式的贡献,包括且不限于新 feature、bugfix、代码优化、生态集成、测试工作、文档撰写。更加欢迎能够认领一个完整的特定语言实现的同学!不要犹豫,欢迎大家以 issue/pull request 的形式将你的想法反馈到社区,一起来建设更好的 RocketMQ!
484 0
RocketMQ 多语言 SDK 开源贡献召集令
|
消息中间件 弹性计算 自然语言处理
RocketMQ 5.0 多语言客户端的设计与实现
提到新版本,我们往往会首先想到服务端架构的设计变动,很容易忽略客户端的设计理念。 客户端也是消息产品的必要组成部分,许多特性需要 client 与 server 两端互相协作,才能更好地实现。 而轻量化、云原生、统一模型是 RocketMQ 5.0 客户端的三个最为重要的设计理念。
446 0
RocketMQ 5.0 多语言客户端的设计与实现
|
XML JSON 自然语言处理
Darabonba:支持任意 OpenAPI 网关的多语言 SDK 方案
在今天,开放平台及 OpenAPI 随处可见,它是系统与系统之间集成的重要桥梁。但 OpenAPI 用起来是否真的舒服,这要打一个大大的问号。本文将介绍 OpenAPI 领域下的难题和一些解决方案。
Darabonba:支持任意 OpenAPI 网关的多语言 SDK 方案
|
XML 自然语言处理 Java
如何实现 OpenAPI 多语言 SDK 开发?
由于每个网关所对应的后端情况不同,因此没有一套元数据可以适用于所有的网关。阿里云通过重新定义一门 DSL 语言 —— Darabonba 来支持不同风格的 OpenAPI,同时支持多语言的 SDK、Code Sample 目标生成。本文将从技术原理和解决方案分享相关的探索和实践。
2884 0
如何实现 OpenAPI 多语言 SDK 开发?
|
XML 自然语言处理 Java
多语言SDK开发终极解决方案——阿里云Darabonba
通过客户调用阿里云 OpenAPI 服务所遇到的重点问题来介绍开源技术 Darabonba(原名TeaDSL)是如何逐步解决的。
多语言SDK开发终极解决方案——阿里云Darabonba
|
XML JSON 自然语言处理
TeaDSL:支持任意 OpenAPI 网关的多语言 SDK 方案
在以云计算为主角的开发者视界中,OpenAPI 是绝对的主角。要发短信,用 OpenAPI;要管理资源,用 OpenAPI;要管理权限,用 OpenAPI。如果一个 OpenAPI 解决不了你的问题,那就再来一个。在今天,开放平台及 OpenAPI 随处可见,它是系统与系统之间集成的重要桥梁。但 OpenAPI 用起来是否真的舒服,这要打一个大大的问号。本文将介绍 OpenAPI 领域下的难题和一些解决方案。
1293 0
TeaDSL:支持任意 OpenAPI 网关的多语言 SDK 方案
|
消息中间件 JSON 自然语言处理
统一HTTP网关支持Rocketmq多语言接入
解决问题 多client接入Rocketmq, 维护成本高,升级困难 特性 http方式生产消息、消费消息(推模式,http回调) 多语言接入 系统架构 快速开始 server 下载源代码,编译打包 mvn clean package -Dmaven.
1828 0
统一HTTP网关支持Rocketmq多语言接入
|
自然语言处理 算法 Java
API网关具备自动生成多语言SDK的能力
首先,API网关按照使用用户的不同分别给API提供者(Provider)和API使用者(Consumer)提供了不同的SDK生成入口。对于Provider而言,他们可以在API网关自动生成他们拥有的Group下的所有线上API的调用SDK。
6584 0
|
消息中间件 算法 Java
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
1093 1
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
|
消息中间件 uml RocketMQ
3 张图带你彻底理解 RocketMQ 事务消息
3 张图带你彻底理解 RocketMQ 事务消息
68046 2
3 张图带你彻底理解 RocketMQ 事务消息

相关产品

  • 云消息队列 MQ