概要
このセクションでは、Apache RocketMQ 5.x クライアント SDK の進化の歴史、選択比較、およびベストプラクティスについて説明します。
歴史と選択
Apache RocketMQ プロジェクトは、開始以来、現在のバージョン 5.x に進化してきました。現在、RocketMQ は、基盤となる通信プロトコルの違いに基づいて、主に Remoting プロトコルと gRPC プロトコルの 2 つのシリーズのクライアント SDK をサポートしています。
初期コンポーネント間のデフォルトの通信プロトコルとして、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 詳細については、リンク を参照してください。 |
機能とインターフェース | 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 情報
現在サポートされているプログラミング言語とコードリポジトリは次のとおりです
言語 | リリースノート | SDK リポジトリ |
---|---|---|
Java | メインリポジトリのリリースノート | メインリポジトリ |
Go | メインリポジトリのリリースノート | メインリポジトリ |
機能
更新を待っています。
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 を参照してください。
機能
更新を待っています。
FAQ
以下のセクションでは、特定のシナリオに推奨される選択戦略をいくつか示します。
4.x のサーバーバージョンで gRPC SDK を使用できますか?
いいえ、gRPC SDK は 5.0 以降のサーバーバージョンでのみサポートされています。最初にサーバーをバージョン 5.0 にスムーズにアップグレードしてから、SDK を置き換えることをお勧めします。
Remoting SDK から gRPC SDK に切り替えるときにコードを変更する必要がありますか?
はい、必要です。 gRPC SDK のクライアント API は再設計されており、Remoting SDK API と互換性がありません。したがって、それに応じてコードを変更する必要があります。
新しいシステムで RocketMQ を使用する際の SDK の最適な選択は何ですか?
新しいビジネスシステムを RocketMQ と統合する場合、gRPC SDK を使用することをお勧めします。これは、より優れたユーザーエクスペリエンスと複数言語環境のサポートを提供するためです。