第2章. gRPCを始めよう
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第 1 章で学んだことを応用して、実際の gRPC アプリケーションを一から構築してみよう。この章では、GoとJavaの両方を使用して、簡単なgRPCサービスと、開発したサービスを呼び出すクライアント・アプリケーションを構築する。その過程で、プロトコル・バッファを使った gRPC サービス定義の指定、サーバ・スケルトンとクライアント・スタブの生成、サービスのビジネス・ロジックの実装、実装したサービスを使った gRPC サーバの実行、gRPC クライアント・アプリケーションを使ったサービスの呼び出しについて学ぶ。
ここでは、第1章と同じオンライン小売システムを使い、小売店の商品管理を担当するサービスを構築する必要がある。このサービスはリモートからアクセスすることができ、サービスのコンシューマは本番システムに新しい商品を追加したり、商品IDを提供することでシステムから商品の詳細を取得したりすることができる。このサービスとコンシューマは、gRPCを使ってモデル化する。gRPCを実装するプログラミング言語は自由だが、この章ではGo言語とJava言語の両方を使ってこのサンプルを実装する。
注
本書のソースコードリポジトリで、サンプルのGoとJava両方の実装を試すことができる。
図2-1では、ProductInfo サービスの各メソッド呼び出しのクライアント-サーバー通信パターンを示している。サーバは、addProduct(product) とgetProduct(productId) の 2 つのリモート・メソッドを提供する gRPC サービスをホストしている。クライアントは、これらのリモート・メソッドのいずれかを呼び出すことができる。
図2-1. ProductInfo サービスのクライアント-サーバー間インタラクション
ProductInfo gRPCサービスのサービス定義を作成することから、このサンプルを作り始めよう。
サービス定義の作成
第 1 章で学んだように、gRPC アプリケーションを開発する場合、まず最初に行うことはサービス・インタフェースの定義である。この定義には、コンシューマがリモート呼び出しを行うためのメソッド、これらのメソッドを呼び出す際に使用するメソッド・パラメータやメッセージ形式などが含まれる。これらのサービス定義はすべて、gRPCで使用されるインタフェース定義言語(IDL)であるプロトコル・バッファの定義として記録される。
サービスのビジネス機能を特定したら、ビジネスニーズを満たすサービスインタフェースを定義することができる。このサンプルでは、ProductInfo サービスの2つのリモート・メソッド(addProduct(product) とgetProduct(productId) )と、両方のメソッドが受け入れ、返す2つのメッセージ・タイプ(Product とProductID ...