栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

gRPC-09 传递header信息/元数据 [golang版]

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gRPC-09 传递header信息/元数据 [golang版]

代码地址

https://github.com/wanmei002/grpc-learn/tree/master/ch08
逻辑都在拦截器里实现了,可以直接看 拦截器 的代码

介绍

像一些 token 等数据 我们可能希望通过 header头传递,gRPC的数据先传递到 context 里,然后再写到 header 头里,然后
传递给另一端。

直接上代码 客户端 header 数据的写入

需要导入 google.golang.org/grpc/metadata 这个包

headerData := metadata.Pairs("timestamp", strconv.Itoa(int(time.Now().Unix())), "token", "123")
ctxH := metadata.NewOutgoingContext(ctx, headerData)
// 后续也可以往后面添加数据
ctxH = metadata.AppendToOutgoingContext(ctxH, "kay1", "val1", "key2", "val2")

ctxH就是一个上下文,请求服务端时,传的 context.Context 替换成 ctxH 就行

读取 header 信息

header 头信息也可能通过 trailer 传递

一元模式读取 header 信息
var header, trailer metadata.MD
// 调用服务端方法的时候可以在后面传参数
serverRetMsg, err := client.RPCMethod(ctx, &Struct, grpc.Header(&header), grpc.Trailer(&trailer))
流模式读取 header 信息
stream, err := client.RequestServerStreamMethod(ctx)
header, err := stream.Header()
trailer := stream.Trailer()
服务端 header 头信息的写入 一元模式 数据的写入
header := metadata.Pairs("token", "123")
grpc.SendHeader(ctx, header)
trailer := metadata.Pairs("is-end", "end")
grpc.SetTrailer(ctx, trailer)
流模式 数据的写入

跟一元的一样,服务端提供的方法传进来的流参数里面有相关的方法

header := metadata.Pairs("token", "123")
stream.SendHeader(ctx, header)
trailer := metadata.Pairs("is-end", "end")
stream.SetTrailer(ctx, trailer)
header 头信息的读取 一元模式 数据的读取
md, ok := metadata.FromIncomingContext(ctx)
流模式 数据的读取
md, ok := metadata.FromIncomingContext(stream.Context())
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号