概述
本节介绍 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:检查关键字
- 如果代码包或类路径包含关键字 'remoting',则是 Remoting 协议。否则,则是 gRPC 协议 SDK。
Remoting 协议 SDK 和 gRPC 协议 SDK 之间的对比,请参考以下内容
对比项 | Remoting SDK | gRPC SDK |
---|---|---|
多语言支持 | Java/Go | Java/C/C++/.NET/Go/Rust 有关 链接 的详细信息 |
功能和接口 | 生产者 推送消费者 拉取消费者 LitePullConsumer 管理员 | 生产者 推送消费者(仅 Java) 简单消费者 拉取消费者(工作中) |
兼容版本 | 支持 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 版本中的旧协议。
与早期的 Remoting 协议 SDK 相比,gRPC SDK 具有以下优势
- 更简洁的接口设计,更容易理解,不易出错。
- 更好的接口设计,具有清晰的参数和异常类型。
- 不可变的接口设计,避免因参数和信息泄露导致的业务异常。
- 更好地支持多种语言,因为 gRPC 协议具有支持多种语言的优势,并且能够以更低的成本演进,从而在多种语言 SDK 中实现一致的行为。
想要了解详细的设计思路和演进方向,请参考 RIP-37: 新的统一 API 和 RIP-39: 支持 gRPC 协议。
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,因为它提供了更好的用户体验和对多种语言环境的支持。