跳到主要内容
版本: 5.0

概览

本节介绍 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 SDKgRPC SDK
多语言支持Java/GoJava/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 APIsRIP-39: Support gRPC protocol

SDK 信息

目前支持的编程语言和代码仓库,请参考 rocketmq-clients

特性

等待更新。

常见问题

以下章节列出了一些针对特定场景的推荐选型策略。

  1. gRPC SDK 可以与 4.x 版本的服务端一起使用吗?

    不可以,gRPC SDK 仅支持 5.0 或更高版本的服务端。建议先将服务端平滑升级到 5.0 版本,然后再替换 SDK。

  2. 从 Remoting SDK 切换到 gRPC SDK 是否需要修改代码?

    是的,需要修改。gRPC SDK 的客户端 API 已经重新设计,与 Remoting SDK API 不兼容。因此,需要相应地修改代码。

  3. 在新系统中使用 RocketMQ 时,哪种 SDK 是最佳选择?

    如果新的业务系统正在集成 RocketMQ,建议使用 gRPC SDK,因为它提供了更好的用户体验和对多语言环境的支持。