【发布时间】:2018-02-10 21:10:48
【问题描述】:
我们正在使用 grpc 进行微服务间的通信。我们正在使用 grpc 版本:1.2.0。对于特定测试,我们不断从其中一个微服务中看到此错误:
io.grpc.StatusRuntimeException: INTERNAL: Connection closed with unknown cause
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:141)
at io.grpc.stub.ServerCalls$1$1.onHalfClose(ServerCalls.java:148)
at io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:152)
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:227)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:208)
这只会发生在最初的几个调用中,或者是第一个尝试使用 grpc 调用另一个微服务的测试。后续调用成功,使用相同的代码路径成功。所有微服务都已启动并运行。
有什么想法吗?
【问题讨论】:
-
如果在服务器端设置
GRPC_VERBOSITY=debug和GRPC_TRACE=all会得到什么? -
我在哪里可以设置这些?
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
gRPC 不知道出了什么问题,即使使用调试器,找出问题的时间也可能非常。在未来的 1.7 版本中,那个无用的错误应该是 replaced with something more helpful。我不知道除 I/O 错误之外的任何错误会触发它但能够自行修复。
-
作为解决方法,我将调用包围在 try catch 块中,并在 catch 块中重试相同的调用,它成功了。其余的后续调用也成功。如何确定连接是否仍处于活动状态,如果没有则重新建立连接?
标签: microservices grpc grpc-java