是否可以选择从其他原型文件导入服务?

Is there an option to import services from other proto files?

有时我们的 grpc 服务器 down/unhealthy 以至于我们的客户端无法向 grpc 服务器发出请求,在这种情况下我们计划以通用方式编写健康检查。我们有大量的原型缓冲区文件让我们假设

a.proto

 syntax = "proto3"
 package com.a

 message request{
      string name = 1;
 }

 message response{
      string name = 1;
 }


 service testService{
      rpc check(request) returns (response)
 }

b.proto

 syntax = "proto3"
 package com.a

 message request1{
      string name = 1;
 }

 message response1{
      string name = 1;
 }


 service testService{
      rpc check(request1) returns (response1)
 }

c.proto

syntax = "proto3"
 package com.a

 message request2{
      string name = 1;
 }

 message response2{
      string name = 1;
 }


 service testService{
      rpc check(request2) returns (response2)
 }

有没有办法为以上三种服务编写通用的健康检查程序。 link 以下对于为一个 proto 文件编写健康检查很有用。 https://github.com/grpc/grpc/blob/master/doc/health-checking.md

但是我们需要以通用的方式编写它,比如创建一个健康原型并将其实现到所有 grpc 服务器原型文件中。这里的问题是我们可以导入 message 但不能导入 service method. 。如果你们遇到过编写健康检查的问题,请分享您的评论。

我不太明白为什么你需要在某处导入健康服务,你必须实现这个服务并将它添加到你的每个服务器。

另一种选择是使用 GRPC Services dependency, which provides implementation of health service (HealthServiceImpl) described in your link。 您将创建一个 HealthStatusManager 的实例来管理健康检查服务。然后将通过 #getHealthService() 方法检索到的服务添加到您的服务器。