【发布时间】:2023-03-07 19:01:01
【问题描述】:
我使用protoreflect 编写了http-to-gRPC-gateway。 但是我没有看到任何简单的选项来做相反的事情 - gRPC-to-HTTP-gateway。 其中一个想法是将 GRPC 暴露给外部,但使用自定义网关通过 MessageQ 调用内部微服务以避免负载平衡、发现服务,并且可以将 GRPC 流式转换为持久或使用反射来调用方法而不是使用生成的服务器存根
以下是我目前得到的结果
func main() {
lis, err := net.Listen("tcp", ":9091")
grpcServer := grpc.NewServer(grpc.UnknownServiceHandler(GenericHandler))
//pb.RegisterGreeterServer(grpcServer, &TestService{})
grpcServer.Serve(lis)
}
func GenericHandler(srv interface{}, stream grpc.ServerStream) error {
fullMethodName, ok := grpc.MethodFromServerStream(stream)
log.Printf("Method: %v, %v\n", fullMethodName, ok)
//how to get protobuf payload from stream
//Response:=Invoke Method via Reflection or http or MessageQueue - passing either the raw protocal buffer or as json
//how to return Response
return nil
}
我认为实现这一目标的唯一方法是理解并重新实现实际的处理程序processUnaryRPC
【问题讨论】: