マイクロサービスアーキテクチャは、道路(4)マイクロgRPCビルドサービスの利用を登ります

ユーザー情報マイクロサービスとの契約を作ります

クライアントのユーザー名は、ユーザーがサーバーからの基本的な情報を照会することができます

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 
}

 

 

おすすめ

転載: www.cnblogs.com/zhangyafei/p/11932154.html