无法在grpc中间件中修改metadata的值
来源:15-6 GRPC代理 - 功能测试

秋叶原的黑猫
2022-05-16
老师,我在GrpcJwtAuthTokenMiddleware中间件和GrpcHeaderTransferMiddleware中间件中使用set修改metadata的值,无法影响到下游,不知道是怎么回事。由于无法修改metadata的键值对,导致租户日请求量和QPS的数据均无法拿到。
我拿您的代码做了很多处对比,均没发现问题。
以下是我的部分代码截图
grpcserver.go
grpc_jwt_auth_token.go
此外,在grpc_header_transfer中间件中加入下面发送请求头的代码后,在下游运行会报错
if err:=ss.SendHeader(md);err != nil {
return errors.WithMessage(err,"SendHeader")
}
failed to call UnaryEcho: rpc error: code = Unknown desc = t
ransport: the stream is done or WriteHeader was already called
写回答
2回答
-
weixin_慕丝6003639
2024-06-14
因为老师用的是 grpc v1.30.0-dev,这个版本的 metadata.FromIncomingContext 只是简单的返回了一个 map 形式的 md,后面调用 md.Set 方法设置 key-value 可以影响到 ss.Context 中的原始 map。而新版的 grpc 中对 metadata.FromIncomingContext 方法进行了修改,返回的是一个深拷贝后的 map,对它的任何修改都不会影响 ss.Context 上的原始 map,所以下游通过 metadata.FromIncomingContext 是拿不到上游设置的 key-value。
00 -
慕粉1601214865
2022-07-11
请问你解决了嘛,我也遇到了这个问题
012022-07-11
相似问题
grpc的方法爆红
回答 1
在反向代理中,为什么不加入熔断器?
回答 1