关于header_transfor中间件问题
来源:15-6 GRPC代理 - 功能测试

芒果和芒果柠檬
2020-09-20
老师,无论grpc rule的metadata规则怎么写(增加或删除),到实际的服务下游打印出来的header永远是这三个。
我在setHeader方法调用前,通过debug打断点,能确保自己add和del的header都已经生效(如下箭头是我成功插入的header)。但是到下游雷打不动
md map[:authority:[127.0.0.1:50055] content-type:[application/grpc] user-agent:[grpc-go/1.30.0-dev]]
请问可能是什么原因呢?
3回答
-
kucfire
2021-01-15
找到原因所在了,是grcp_reverse_proxy.go漏写director的内容,里面完整的内容是这样子的
func NewGrpcLoadBalanceHandler(lb load_balance.LoadBalance) grpc.StreamHandler {
return func() grpc.StreamHandler {
nextAddr, err := lb.Get("")
if err != nil {
log.Fatal("get next addr fail")
}
director := func(ctx context.Context, fullMethodName string) (context.Context, *grpc.ClientConn, error) {
c, err := grpc.DialContext(ctx, nextAddr, grpc.WithCodec(proxy.Codec()), grpc.WithInsecure())
md, _ := metadata.FromIncomingContext(ctx)
outCtx, _ := context.WithCancel(ctx)
outCtx = metadata.NewOutgoingContext(outCtx, md.Copy())
return outCtx, c, err
}
return proxy.TransparentHandler(director)
}()
}
10 -
kucfire
2021-01-15
我也遇到这个问题了,老哥已经解决了吗
10 -
牛儿吃草
2020-09-25
感觉是setHeader上面serviceDetail.GRPCRule.HeaderTransfor逻辑问题
我这边测试正常的
网关的打印:md map[:authority:[localhost:8807] abc:[value] content-type:[application/grpc] timestamp:[Sep 25 12:39:37.715841000] user-agent:[grpc-go/1.30.0-dev]]
下游也可以正常获取请求
下游的打印:md map[:authority:[127.0.0.1:50055] abc:[value] content-type:[application/grpc] timestamp:[Sep 25 12:39:37.715841000] user-agent:[grpc-go/1.30.0-dev]]
00
相似问题