我使用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
}
我看到实现这一目标的唯一方法是理解并重新实现实际的处理程序过程UnaryRPC
慕盖茨4494581
相关分类