使用Java客户端存根监控gRPC的健康状态
我想查看一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。