RocketMQ 5.0 多语言客户端的设计与实现

RocketMQ 5.0 强调轻量化设计,采用Protobuf协议减少多语言生态障碍,移除客户端计算逻辑以减轻负担。云原生特性体现在极致弹性伸缩、低耦合和云端一体,如Pop协议提升消费并发。统一模型明确了消息模型,加强了topic类型校验和消费者类型定义,简化了使用流程。
摘要由CSDN通过智能技术生成

本文作者:古崟佑,阿里云中间件开发。

RocketMQ 5.0 版本拥有非常多新特性,比如存储计算分离、 batch 能力的提升等,它是具有里程碑意义的版本。

提到新版本,我们往往会首先想到服务端架构的设计变动,很容易忽略客户端的设计理念。客户端也是消息产品的必要组成部分,许多特性需要 client 与 server 两端互相协作,才能更好地实现。

轻量化、云原生以及统一模型是 RocketMQ 5.0 客户端的三个设计理念。

01 轻量化

轻量化的重点在于轻逻辑、轻流程,化繁为简,减少多语言生态发展的阻碍。

上图列举了 RocketMQ 4.x 版本和 RocketMQ 5.0 版本的差异。

①4.x 版本的序列化使用 JsonCodecs 和 RocketMQCodecs,5.0 版本使用的则是标准的 Protobuf 协议。多语言发展的阻碍包括许多不规范,比如 RocketMQ 自定义序列化对于其他的语言需要自己实现一套协议以实现正反序列化解析。而 Json 作为标准序列化协议,基本可以实现所有语言的正反序列化,但缺点也非常明显,冗余信息过多,体积占用太大,因此更多用于 restful 架构等前后端交互的场景。此外,消息中间件场景无需关心传输数据时是否可读。因此, Protobuf 成为了选择,它原生支持多语言,且传输时体积占用非常小,成熟且标准。

②此前客户端使用 consumer 消费信息时,会存在计算逻辑比如重平衡 以及系统级 topic 处理。但是 RocketMQ 5.0 版本将所有计算逻辑上移到了服务端,客户端只需简单地调用 Receive 接口,也无需额外处理系统级 topic ,整体逻辑变得非常轻量。

③4.x版本的实现和维护成本非常高,因此5.0版本并没有基于4.x进行迭代和更新。设计之初有一种思路为直接在4.x客户端上增加 gRPC 协议,迭代升级成为5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值