Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。
この記事は、Quarkus.io のブログ記事、gRPC with Quarkus! の翻訳記事です。
Quarkus 1.5 では、gRPC Quarkus拡張機能の最初のバージョンを出荷しました。
gRPCに馴染みのない方に紹介すると、HTTP/2とProtobufに依存した高効率なリモートプロシージャコールの仕組みです。gRPC は、Go、JavaScript、Python、Java などの任意の言語から gRPC サービスを実装して利用できます。 gRPC は、より古典的なリクエスト/レスポンスの相互スキームと同様に、双方向のデータストリームをサポートしています。gRPCは特にマイクロサービスに適しています。マイクロサービスシステムを構築する際の3つの大きな懸念事項である認証、トレース、ヘルスのサポートを提供します。
gRPC サービスは、異なるメソッドをリストアップし (次の例では Hello
) 、と交換されるメッセージ (HelloRequest
とHelloReply
) の定義したproto
ファイルに記述されています。
syntax = "proto3"; option java_multiple_files = true; option java_package = "io.quarkus.grpc.examples.helloworld"; option java_outer_classname = "HelloWorld"; package io.quarkus.grpc.example; service Greeter { rpc Hello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
Proto コンパイラであるprotoc
は、これらのprotoファイルから、ターゲットとなる言語ごとにスタブ (クライアント) とベースの実装 (サービス) を生成します。
Quarkus で gRPC サポートを有効にするには、quarkus-grpc
拡張機能を追加します。以下の依存関係をプロジェクトに追加するか、以下のコマンドを実行してください。
quarkus-grpc の依存関係
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-grpc</artifactId> </dependency>
既存のプロジェクトに quarkus-grpc 拡張機能を追加します。
mvn quarkus:add-extension -Dextension=quarkus-grpc
もちろん、プロジェクトジェネレータからgRPC
を選択できます。
現時点では、この拡張機能は
protoc
の生成をカバーしていないので、そのためにはプロジェクトを設定する必要があります。こちらで例をご紹介しています。gRPC 拡張機能は以下をサポートしています。
- gRPC サービスの実装
- gRPC サービスの消費
- 平文とTLS
- 相互認証
- gRPCのリフレクションとヘルス・サービス
- gRPCの「bare」Java API と Quarkus のリアクティブ API と統合する Mutiny API
などなど、実際に見てみよう。
この動画で紹介しているコードは、このGitHubプロジェクトから入手できます。
まだまだ続く!
それは最初の一歩に過ぎない。より良いものにするためのアイデアはいくらでもあります。まず、protoc
の生成を取り上げます。しして、開発時にこれらのproto
ファイルを修正できるようにすることで、ホットリロードの体験を向上させたいと思います。カスタムコンプレッサ、ロードバランサー、ネームリゾルバのサポートもロードマップ上にあります。
私たちはあなたのフィードバックを大切にしていますので、バグを報告したり、改善を求めてください。
Quarkus のユーザーの方、または好奇心旺盛な方は、恥ずかしがらずにコミュニティに参加してください。
- GitHub でフィードバックを提供します。
- いくつかのコードを作成し、PRをプッシュします。
- Zulipやメーリングリストで議論します。
- Stack Overflowで質問をします。