问题描述
我遵循https://grpc.github.io/grpc-java/javadoc/上的示例代码来测试客户端流呼叫,并发现我的ClientCall从未处于就绪状态,因此ClientCall.Listener无法正常工作。 我会错过一些东西,使其永远无法工作吗?
ManagedChannel channel = ManagedChannelBuilder.forAddress("127.0.0.1",9091)
.usePlaintext()
.build();
ClientCall<Business.SubscribeShadowConfigRequest,Business.ShadowConfigGetResponse> call =
channel.newCall(AgentServiceGrpc.getSubscribeShadowConfigMethod(),CallOptions.DEFAULT);
ClientCall.Listener listener = new ClientCall.Listener<Business.ShadowConfigGetResponse>() {
@Override
public void onMessage(Business.ShadowConfigGetResponse response) {
// Notify gRPC to receive one additional response.
log.info(">>> in onMessage");
try {
log.info(">>> response = {}",gson.toJson(Nebulav1.Config.parseFrom(Base64Utils.base64DecoderByte(response.getData().toStringUtf8()))));
} catch (InvalidProtocolBufferException e) {
log.error(e.getMessage());
log.trace(e.getMessage(),e);
}
call.request(1);
}
@Override
public void onReady() {
log.info(">>> in onReady");
while (call.isReady()) {
log.info(">>> call.isReady(): {}",call.isReady());
Business.SubscribeShadowConfigRequest req = Business.SubscribeShadowConfigRequest.newBuilder().setName("extension-nebulav1-task").build();
call.sendMessage(req);
call.halfClose();
log.info(">>> call.sendMessage");
return;
}
}
@Override
public void onClose(Status status,Metadata trailers) {
log.info(">>> in onClose");
log.info(">>> status = {}",status.getCode());
log.info(">>> closed");
}
};
call.start(listener,new Metadata());
log.info("--- call.started");
call.request(1);
log.info("--- call.requested");
do {
log.info("--- call.isReady() = {}",call.isReady());
Thread.sleep(60000);
} while(call.isReady() != true);
log.info("--- call.isReady() = {}",call.isReady());
日志显示我的ClientCall.isReady()在调用ClientCall.start后显示错误超过10分钟。
2020-08-22 11:36:12.374 INFO com.company.DynamicImportApplication.logStarted[59][main] - Started DynamicImportApplication in 4.38 seconds (JVM running for 5.014)
2020-08-22 11:36:13.029 INFO com.company.DynamicImportApplication.run[83][main] - --- call.started
2020-08-22 11:36:13.030 INFO com.company.DynamicImportApplication.run[86][main] - --- call.requested
2020-08-22 11:36:13.031 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:37:13.032 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:38:13.033 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:39:13.034 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:40:13.034 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:41:13.035 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:42:13.036 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:43:13.037 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:44:13.038 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:45:13.039 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:46:13.042 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:47:13.042 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:48:13.043 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
2020-08-22 11:49:13.044 INFO com.company.DynamicImportApplication.run[96][main] - --- call.isReady() = false
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)