ユーザー情報マイクロサービスとの契約を作ります
クライアントのユーザー名は、ユーザーがサーバーからの基本的な情報を照会することができます
GRPCの プロト user.proto定義されたクライアント要求、サーバーの応答データフォーマット を自動的に生成user.pb.go、データ交換機能を提供 server.goマイクロサービスサーバーを マイクロサービスクライアントclient.go
プロトファイルの調製
//バージョン 構文=「proto3」; // user.pb.go生成指定されたパッケージ名 パッケージプロト、 クライアントによって要求されたデータフォーマットは//定義されている メッセージUserRequest { パラメータ//定義要求 。文字列名= 1; } //データ・フォーマットのそれぞれの量のサービス終了の定義 メッセージUserResponse { //応答パラメータの定義 。のInt32 ID = 1; 文字列名= 2; のInt32年齢= 3; //フィールド修飾子 //スライスタイプと同様の可変配列を表し、繰り返し 繰り返し文字列を。= 4趣味; } インタフェースに//対応する スケール//サービス定義されたサービスと呼ばれるオープン -serviceのUserInfoService { インターフェース内//同等の方法 //定義要求パラメータUserRequest、UserResponseの応答パラメータ RPC GetUserInfo(UserRequest)戻り値(UserResponse ){} }
.GOファイルを生成2
- openコマンドをpycharm、入力インタフェースfileコマンドは生成します。
protoc -I。--go_out =プラグイン= grpc :. ./user.proto
サーバーを書く3。
メインパッケージ のインポート( 「文脈」 「FMT」 PB「マイクロゴー/マイクロマイ/ GRPC /プロト」 「google.golang.org/grpc」 「NET」 ) //は、合意を達成するために、サーバ・インタフェースを定義する タイプのUserInfoService構造体を{ } VAR UserInfoService U = {} インターフェイス実装する//サーバ必要 FUNCを(S * UserInfoService)GetUserInfo(CTX context.Context、pb.UserRequest REQ *)(* pb.UserResponse RESP、ERRエラー){ 名:REQ = .nameのは、 //ユーザ情報データベースをチェック 名前IF == "zhangsan" { RESP&pb.UserResponse = { Idを:. 1、 名前:名 年齢:22であり、 //フィールドスライス 趣味:[]ストリング{ "歌います "、 " 実行""バスケットボール「}、 } } ERR =ゼロ リターン } FUNCメイン(){ //リスナー1 ADDR:= "127.0.0.1:8080" LIS、ERR = net.Listen( "TCP"、ADDR) !ERR =ゼロ{IF fmt.Printf(「モニター異常:%S \ N- "ERR) } fmt.Printf("リスニング始まる:%S \ N-」、ADDR) GRPCの// 2例 S:= grpc.NewServer() マイクロGRPCに登録// 3。サービス //第2のパラメータタイプがインタフェース型変数必要 pb.RegisterUserInfoServiceServer(S、およびU)を // 4.開始gRPCサービス s.Serve(LIS) }
クライアントを書く4。
メインパッケージ のインポート( "文脈" "FMT" PB "マイクロゴー/マイクロマイ/ GRPC /プロト" "google.golang.org/grpc" ) FUNCメイン(){ // GRPC 1.サーバー接続の作成 CONNを、ERR = grpc.Dial( "127.0.0.1:8080"、grpc.WithInsecure()) = {ゼロIF ERR! fmt.Printf( "接続例外:%S \ N-"、ERR) } ディファーはconn.close( ) //インスタンス化gRPCクライアント2. クライアント:= pb.NewUserInfoServiceClient(コネチカット州) // 3.組立パラメータ REQ:=新新(pb.UserRequest) req.Name = "zhangsan" //コール4.インタフェース RESP、ERR := client.GetUserInfo(context.Background()、REQ) ERR =ゼロ{IF! fmt.Printf( "例外に応答:%S \ n"は、ERR) } ( "%のV \ n応答結果"、RESP)fmt.Printf }