【问题标题】:grpc gives "INTERNAL: Connection closed with unknown cause"grpc 给出“内部:连接因未知原因关闭”
【发布时间】: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=debugGRPC_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


【解决方案1】:

至少在我的情况下,这个问题是 io.grpc (1.4.0) 和 io.netty (4.1.27.FINAL) 之间的版本不匹配。我不得不在我的 build.gradle 文件中明确地将 io.netty 版本设置为 4.1.11.FINAL,然后异常突然消失了。

不幸的是,我找不到任何关于哪个版本的 grpc 与哪个版本的 netty 一起使用的信息。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2022-11-08
    相关资源
    最近更新 更多