跳到主要內容
版本: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 協議?

方法一:查看倉庫坐標

  • 對於 Java 語言:如果倉庫坐標是 rocketmq-client,則為 Remoting 協議。如果是 rocketmq-client-java,則為 gRPC 協議。
  • 對於其他語言:其他 gRPC 語言也以 rocketmq-client-{language} 的格式命名。

方法二:查看關鍵字

  • 如果程式碼包或類別路徑包含關鍵字「remoting」,則為 Remoting 協議。否則,為 gRPC 協議 SDK。

Remoting 協議 SDK 與 gRPC 協議 SDK 的對比,請參考以下

對比項Remoting SDKgRPC SDK
多語言支援Java/GoJava/C/C++/.NET/Go/Rust
詳細資訊請見 連結
功能與介面Producer
PushConsumer
PullConsumer
LitePullConsumer
Admin
Producer
PushConsumer(僅 Java)
SimpleConsumer
PullConsumer(工作中)
相容版本支援 4.x 和 5.x 伺服器僅支援伺服器版本 5.0
演進Remoting 協議主要用於伺服器內部元件的通訊演進gRPC 協議為首選的輕量級多語言客戶端,後續推廣將逐步補齊所有能力

Remoting SDK

Remoting 協議 SDK 作為 Apache RocketMQ 最初的 SDK 演進,採用 RocketMQ 內部元件的 Remoting 通訊協議。用於服務內部元件的通訊,同時也支援客戶端訊息發送和控制操作的 API 通訊。

SDK 資訊

目前支援的程式語言與程式碼倉庫如下

語言ReleaseNoteSDK Repo
Java主倉庫的 ReleaseNote主倉庫
Go主倉庫的 ReleaseNote主倉庫

功能

等待更新。

gRPC SDK

Apache RocketMQ 5.0 版本中推出的 gRPC 協定 SDK,旨在為 Java、C++、C#、Golang、JavaScript 和 Rust 等所有主流程式語言提供雲原生、穩健的客戶端解決方案。gRPC SDK 遵循 rocketmq-apis 約束,並使用 Protocol Buffers 和 gRPC 取代 4.x 版本中的舊協定。

gRPC SDK 擁有以下優勢,優於早期的 Remoting 協定 SDK

  • 更簡潔的介面設計,更容易理解,不易出錯。
  • 更好的介面設計,具有明確的參數和例外類型。
  • 不可變的介面設計,避免因參數和資訊外洩而導致的業務例外。
  • 對多種語言的更好支援,因為 gRPC 協定具有支援多種語言的優勢,並能以較低的成本進行演進,以在多種語言 SDK 中實現一致的行為。

想要詳細的設計思維和演進方向,請參閱 RIP-37:新的統一 APIRIP-39:支援 gRPC 協定

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,因為它提供了更好的使用者體驗和對多種語言環境的支援。