私は最終的に自分の道を見つけた:https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md
だから基本的には、grpc.SetHeader()
+ grpc.SendHeader()
とgrpc.SetTrailer()
は私が探していた全くものです。クライアント側では、grpc.Header()
とgrpc.Trailer()
関数をRPC呼び出しに渡す必要があり、その引数は埋められるオブジェクトmetadata.MD
です。クライアント側では
、あなたの受信メタデータを定義します。
var header, trailer metadata.MD
その後、SomeRPCCall()
単項RPCに渡し:
response, err := client.SomeRPCCall(
context.Background(),
proto.MyMessage{},
grpc.Header(&header),
grpc.Trailer(&trailer),
)
そして今、あなたはあなたのメタデータに何があるか確認できます。
for key, value := range header {
fmt.Printf("%s => %s", key, value)
}
for key, value := range trailer {
fmt.Printf("%s => %s", key, value)
}
サーバー側では、次の操作を実行できます。
右RPC後に送信すべきデータが受信された(しかし、それが処理される前)力は:
grpc.SendHeader(ctx, metadata.New(map[string]string{"my-key": "my-value"}))
または&に沿って(RPCプロセスの最後にメタデータを送信する設定)Status
で:
grpc.SetTrailer(ctx, metadata.New(map[string]string{"my-key": "my-value"}))