首页 > 解决方案 > GRPC ConnectivityState 不能正常工作?

问题描述

ManagedChannel managedChannel = ManagedChannelBuilder
                    .forAddress("localhost", 9090)
                    .usePlaintext().build();

System.out.println("State: " + managedChannel .getState(false)) // State: IDLE

Grpc.Stub stub = Grpc.newStub(managedChannel);

System.out.println("State: " + managedChannel .getState(false)) // State: IDLE

stub.callMethod();

System.out.println("State: " + managedChannel .getState(false)) // State: IDLE

上面的代码是 GRPC 客户端。它与 grpc 服务器建立连接。但是每次通道状态都是IDLE?何时处于 CONNECTING 和 READY 状态?怎么了?

标签: javastategrpcchannelconnectivity

解决方案


需要等待另一个状态。以下代码connection state: TRANSIENT_FAILURE在服务器未启动且connection state: READY处于健康状态时打印。gRPC 版本:1.24.0

ManagedChannel managedChannel = ManagedChannelBuilder
    .forAddress("localhost", 9090)
    .usePlaintext().build();
 
ConnectivityState state = channel.getState(true);
while (state == ConnectivityState.IDLE || state == ConnectivityState.CONNECTING) {
    state = channel.getState(true);
}

System.out.println("connection state: " + state.toString());

推荐阅读