为了账号安全,请及时绑定邮箱和手机立即绑定

从构造函数调用另一个GRPC服务

从构造函数调用另一个GRPC服务

梦里花落0921 2021-05-20 22:23:51
在GRPC中...在可以响应任何请求之前调用另一个GRPC服务的最有效方法是什么?我的代码在这里看起来有些混乱……在GreetingServiceImpl的构造函数中,我正在启动一个Thread只是为了从运行在不同端口上的GreetingServiceRepository服务中获取某种Greetings列表?因此,用例是这样的……有一个GRPC服务GreetingsRepository,其中包含问候列表,以及GreetingServiceImpl,它调用GreetingsRepository ..我想自定义响应,以便可以为每个请求返回自定义响应。 ...public class MyGrpcServer {  static public void main(String [] args) throws IOException, InterruptedException {    Server server = ServerBuilder.forPort(8080)        .addService(new GreetingServiceImpl()).build();    System.out.println("Starting server...");    server.start();    System.out.println("Server started!");    server.awaitTermination();  }  public static class GreetingServiceImpl extends GreetingServiceGrpc.GreetingServiceImplBase {    public GreetingServiceImpl(){        init();    }    public void init(){        //Do initial long running task        //Like running a thread that will call another service from a repository        Thread t1 = new Thread(){            public void run(){                //Call another grpc service                 ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8081)                    .usePlaintext(true)                    .build();                GreetingServiceRepository.eGreetingServiceRepositoryBlockingStub stub =                    GreetingServiceRepositoryGrpc.newBlockingStub(channel);                //Do something with the response            }        }        t1.start();    }GRPC中是否有一种方法可以初始化服务,然后它才能响应任何其他请求?我不确定构造函数是否是一个好主意..并启动另一个线程只是为了调用另一个服务。
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

有两种主要方法:1)延迟启动服务器,直到相关服务准备就绪; 2)延迟客户端向该服务器发送请求,直到相关服务准备就绪。


延迟启动服务器,直到准备就绪:


GreetingServiceImpl gsi = new GreetingServiceImpl();

Server server = ServerBuilder.forPort(8080)

    .addService(gsi).build();


System.out.println("Starting server...");

gsi.init();

server.start();

延迟客户端向该服务器发送请求的时间取决于客户端如何了解服务器的地址。例如,如果使用使用该Health服务的负载平衡代理,请等待直到准备就绪,然后调用:


healthStatusManager.setStatus("", ServingStatus.SERVING);

然后,代理将了解该服务器运行状况良好,并通知客户端有关后端的信息。


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信