共计 2819 个字符,预计需要花费 8 分钟才能阅读完成。
作者:艾阳坤
目前 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/roc…
rocketmq: RocketMQ 主仓库(内置 5.0 proxy 实现)
https://github.com/apache/roc…
rocketmq-apis: RocketMQ 5.0 协定具体定义
https://github.com/apache/roc…
《RIP-37: RocketMQ 全新对立 API 设计》
https://shimo.im/docs/m5kv92O…
《RIP-39: RocketMQ gRPC 协定反对》
https://shimo.im/docs/gXqmeEP…
相干链接
[1] Apache RocketMQ 5.0 SDK
https://github.com/apache/roc…
[2] rocketmq 官网
https://rocketmq.apache.org/d…
[3] rocketmq-namesrv
https://github.com/apache/roc…
[4] rocketmq-proxy
https://github.com/apache/roc…
[5] Java 的 API 设计
https://github.com/apache/roc…
点击此处,参考残缺的奉献流程。