Metadata
为了传grpc的meta, 需要添加
// 为了传grpc的meta, 需要添加 // Header: client.WithMetaHandler(transmeta.ClientHTTP2Handler), // Protocol: client.WithTransportProtocol(transport.GRPC), // Metadata: 你想接受的 metadata cli, err3 := demoservice.NewClient( "demo", client.WithResolver(r), client.WithMetaHandler(transmeta.ClientHTTP2Handler), client.WithTransportProtocol(transport.GRPC), client.WithClientBasicInfo(&rpcinfo.EndpointBasicInfo{ ServiceName: "demo", }), ) if err3 != nil { panic(err3) }传递:
- metainfo.WithPersistentValue: 会一直存在与 metadata 中
- metainfo.WithValue: 只会传递到下一个服务
ctx := metainfo.WithPersistentValue(context.Background(), "CLIENT_NAME", "demo") res, err2 := cli.Hello(ctx, &v1.Req{Name: "error"})接收:
- metainfo.GetPersistentValue: 会一直存在与 metadata 中
- metainfo.GetValue: 只会传递到下一个服务
clientName, ok := metainfo.GetPersistentValue(s.ctx, "CLIENT_NAME") if ok { fmt.Println("client name:", clientName) }传递错误: 环境错误:
- 网络错误 业务错误:
- 参数异常, 服务端模拟一个参数异常:
- 1004001: 业务错误码
- "client params error": 异常消息
if req.Name =="error" { fmt.Printf("name:%s,err:%v\n",req.Name) return nil, kerrors.NewGRPCBizStatusError(1004001, "client params error") }客户端接收并处理异常:
var bizErr *kerrors.GRPCBizStatusError if err2 != nil { if ok := errors.As(err, &bizErr); ok { fmt.Printf("%#v\n", bizErr) } klog.Fatal(err2) return }