檢查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

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