概覽
本節介紹 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 SDK | gRPC SDK |
---|---|---|
多語言支援 | Java/Go | Java/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 資訊
目前支援的程式語言與程式碼倉庫如下
語言 | ReleaseNote | SDK 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:新的統一 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,因為它提供了更好的使用者體驗和對多種語言環境的支援。