GRPC 的 metadata

客户端发送

func main() {
    conn,err := grpc.Dial(":50052",grpc.WithInsecure())
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    c := proto.NewGreeterClient(conn)

    // 创建metadata

    // 第一种方式
    md := metadata.New(map[string]string{
        "key1":"val1",
        "key2":"val2",
    })

    // 第二种方式
    md = metadata.Pairs(
        "key1","val1",
        "key2","val2",
        )

    // 发送 metadata

    // 创建带有meta的context
    ctx := metadata.NewOutgoingContext(context.Background(),md)

    // 将 ctx 代替原 context.Background()
    res,_ := c.SayHello(ctx,&proto.StreamReqData{Data: "hi"})

    fmt.Println(res)
}

 

服务端获取

func (s *server) SayHello (ctx context.Context, in *proto.StreamReqData) (*proto.StreamResData, error) {
    md, _ := metadata.FromIncomingContext(ctx)
    if md != nil {
        // 接收所有metadata
        fmt.Println(md)
        // 循环输出
        for key,val := range md {
            fmt.Println(key,val)
        }
        // 只取里面的key1
        if nameSlice,ok := md["key1"]; ok {
            for _,val := range nameSlice {
                fmt.Println(val)
            }
        }
    }
    return &proto.StreamResData{Data: "你好"},nil
}

 

posted @ 2022-01-03 18:09  JaydenQiu  阅读(233)  评论(0)    收藏  举报