关于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)

   }()

}


1
0

kucfire

2021-01-15

我也遇到这个问题了,老哥已经解决了吗

1
0

牛儿吃草

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]]

0
0

(打造简历金牌项目)Vue+Go 开发企业级微服务网关项目

简历中摒弃烂大街的培训机构项目,带你开发企业级微服务网关

1316 学习 · 352 问题

查看课程