跳到主要内容

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
}