概览
本节介绍 Apache RocketMQ 5.x 客户端 SDK 的演进历史、选型对比和最佳实践。
历史与选择
自 Apache RocketMQ 项目启动以来,已演进到当前版本 5.x。目前,RocketMQ 主要支持基于底层通信协议差异的两个系列客户端 SDK,即 Remoting 协议和 gRPC 协议。
作为早期组件之间的默认通信协议,Remoting 协议有一个嵌入式客户端 SDK,它与主仓库同步演进和迭代。Remoting 协议 SDK 始终与服务端代码版本迭代绑定,主要支持基于 Java 的语言。
gRPC 协议在 5.0 版本中新引入,旨在与主流云原生技术一起演进出更轻量、标准化且易于扩展的客户端-服务端通信协议。gRPC 协议 SDK 作为独立仓库 RocketMQ Clients 进行演进,支持 Java/C++/.NET/Go/Rust 等语言。客户端与服务端之间存在相对解耦的关系,遵循 RocketMQ API 协议接口约定。
如何快速区分使用的 SDK 是 Remoting 协议还是 gRPC 协议?
方法 1:检查仓库坐标
- 对于 Java 语言:如果仓库坐标是 rocketmq-client,则是 Remoting 协议。如果是 rocketmq-client-java,则是 gRPC 协议。
- 对于其他语言:其他 gRPC 语言也以 rocketmq-client-{language} 的格式命名。
方法 2:检查关键字
- 如果代码包或 classpath 包含关键字 'remoting',则是 Remoting 协议。否则,是 gRPC 协议 SDK。
Remoting 协议 SDK 和 gRPC 协议 SDK 的对比,请参考以下内容:
对比项 | Remoting SDK | gRPC SDK |
---|---|---|
多语言支持 | Java/Go | Java/C/C++/.NET/Go/Rust 详情请见 链接 |
特性与接口 | 生产者 PushConsumer PullConsumer LitePullConsumer 管理 | 生产者 PushConsumer(仅 Java) SimpleConsumer PullConsumer(开发中) |
兼容版本 | 支持 4.x 和 5.x 服务端 | 仅支持服务端 5.0 版本 |
演进方向 | Remoting 协议主要用于服务端内部组件的通信演进 | gRPC 协议是首选的轻量级多语言客户端,后续推广将逐步完善所有能力 |
Remoting SDK
Remoting 协议 SDK 作为 Apache RocketMQ 最初的 SDK 演进而来,使用 RocketMQ 内部组件的 Remoting 通信协议。它用于服务内部组件的通信,也支持客户端消息发送和控制操作的 API 通信。
SDK 信息
目前支持的编程语言和代码仓库如下
语言 | 发布说明 | SDK 仓库 |
---|---|---|
Java | 主仓库发布说明 | 主仓库 |
Go | 主仓库发布说明 | 主仓库 |
特性
等待更新。
gRPC SDK
gRPC 协议 SDK 在 Apache RocketMQ 5.0 版本中引入,旨在为所有主流编程语言(包括 Java、C++、C#、Golang、JavaScript 和 Rust)提供云原生、健壮的客户端解决方案。gRPC SDK 遵循 rocketmq-apis 约束,并使用 Protocol Buffers 和 gRPC 替换了 4.x 版本中的旧协议。
gRPC SDK 相对于早期的 Remoting 协议 SDK 具有以下优势
- 更简洁的接口设计,更易于理解,不易出错。
- 更好的接口设计,具有清晰的参数和异常类型。
- 不可变接口设计,避免因参数和信息泄露导致的业务异常。
- 更好的多语言支持,因为 gRPC 协议具有多语言支持的优势,并能够以更低的成本演进,从而在多种语言 SDK 中实现一致的行为。
欲了解详细的设计思路和演进方向,请参考 RIP-37: New and Unified APIs 和 RIP-39: Support gRPC protocol。
SDK 信息
目前支持的编程语言和代码仓库,请参考 rocketmq-clients。
特性
等待更新。
常见问题
以下章节列出了一些针对特定场景的推荐选型策略。
gRPC SDK 可以与 4.x 版本的服务端一起使用吗?
不可以,gRPC SDK 仅支持 5.0 或更高版本的服务端。建议先将服务端平滑升级到 5.0 版本,然后再替换 SDK。
从 Remoting SDK 切换到 gRPC SDK 是否需要修改代码?
是的,需要修改。gRPC SDK 的客户端 API 已经重新设计,与 Remoting SDK API 不兼容。因此,需要相应地修改代码。
在新系统中使用 RocketMQ 时,哪种 SDK 是最佳选择?
如果新的业务系统正在集成 RocketMQ,建议使用 gRPC SDK,因为它提供了更好的用户体验和对多语言环境的支持。