在一个Go App中提供gRPC和Restful服务

时间:2018-06-07 21:19:48

标签: go grpc

我在Go中有一个非常好的应用程序,现在我必须使这个应用程序也作为gRPC服务器(我已经创建了所需的文件)。我在端口8000中运行了其余的端点,现在我有下一个问题:

  1. 我可以在同一个实例中为grpc和restful app提供服务吗?
  2. 我应该指定一个不同的端口来服务gRPC吗?
  3. 在这种情况下推荐的方法是什么?因为grpc存根将是唯一的 我们的一些微服务消耗了,但宁静的将是 由某些应用程序的前端消耗
  4. 如果我可以同时为两者服务,我应该如何初始化服务器?

1 个答案:

答案 0 :(得分:1)

  1. 是的!如果您想将gRPC 作为提供RESTful服务,那么有一个gRPC Gateway项目允许您注释您的Protos,因此可以通过REST提供服务。

  2. 是的,但这有点棘手。 Go中的gRPC服务器实现了net/http.Handler,因此您可以将其添加到现有的HTTP服务器中。获取匹配的URL路径是您需要使用的,但它肯定是可能的。

  3. 我认为没有任何推荐的方法。它主要取决于环境约束(例如是否存在代理,如何加密连接等)。

  4. 首先初始化gRPC服务器,然后将其添加到HTTP服务器。