检查grpc server是否可连接

分两种情况,一种是普通调用,一种是stream调用。

(1)普通调用

直接使用返回的status来检查。不过如果请求本身就可能失败,不是因为server没有启动的原因,则可以进一步检查error_message的内容。

普通调用下的server可连接性检查,应该也可以使用stream调用描述的方式,可能更加准确,但是没有实验过。

grpc::ClientContext context;
GetSomethingRequest request;
request.set_xxx(123);
GetSomethingResponse response;

grpc::Status status = stub.GetSomething(&context, request, &response);
if(!status.ok()) {
  std::cerr << "request failed: " << status.error_message();
}

(2)stream调用

auto channel = grpc::CreateChannel(address, grpc::InsecureChannelCredentials());
auto stub = MyService::NewStub(channel);

ClientContext context;
GetSomethingRequest request;
std::unique_ptr<grpc::ClientReader<GetSomethingResponse>> reader(
    stub->GetSomething(&context, request));
if (channel->GetState(true) != GRPC_CHANNEL_READY) {
  std::cerr << "message bridge service not available";
}

可以通过channel的GetState方法来确定,不过需要在客户端发出请求后再去检查,客户端仅仅是初始化了channel但是没有发送过请求的时候,GetState的返回值不会是GRPC_CHANNEL_READY

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章