使用Java客户端存根监控gRPC的健康状态

编程语言 2026-07-11

我想查看一个GRPC服务的健康状况。我可以创建一个客户端并调用 'grpc.health.v1.Health/Check'。我也可以调用 'grpc.health.v1.Health/Watch'。

使用grpcurl时,它输出 "status": "SERVING",然后按预期等待后续的响应。

用我的Java客户端,我获得一个响应的迭代器

Iterator<HealthCheckResponse> watch = healthBlockingStub.watch(HealthCheckRequest.getDefaultInstance());

第一次调用 next() 时,我就会收到SERVING响应。若随后调用 hasNext(),它会一直挂起,直到收到下一次响应。

我想在每次收到新响应时获得通知。我不想让线程在等待下一次响应时被阻塞。或者我想能够问,'自从我上次查看以来,是否有新响应被接收?'

我想要的功能是否可实现?应该如何使用这个迭代器?

解决方案

与其使用阻塞存根,你可以使用 HealthStub,它会将响应异步地返回给StreamObserver。

HealthGrpc.HealthStub healthStub = HealthGrpc.newStub(channel);

healthStub.watch(HealthCheckRequest.getDefaultInstance(), new StreamObserver<>() {
    @Override
    public void onNext(HealthCheckResponse response) {
        // do something with the response
    }

    @Override
    public void onError(Throwable throwable) {

    }

    @Override
    public void onCompleted() {

    }
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章