最近遇到 grpc 客户端报错 rpc error: code = Unavailable desc = transport is closing,原因是连接长时间没有使用,被服务端断开,
但是看过grpc源码的都知道,如果failfast 设置为false的话,应该会重试的;并且 连接关闭之后grpc.clientConn也会维护这个状态,所以不应该出现这个问题才对,
这个是个很奇怪的事情
后来考虑了一下有可能是网络之间proxy等的问题,因为长时间不活跃关闭了,但是不通知grpc的client和server端
在 grpc.NewServer(opt...) 的时候加上 以下参数,就是连接长时间不使用,就释放
验证完美解决问题
grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: 5 * time.Minute, //这个连接最大的空闲时间,超过就释放,解决proxy等到网络问题(不通知grpc的client和server)
}

本文探讨了gRPC客户端报错'rpcerror:code=Unavailabledesc=transportisclosing'的原因,通常是因为连接长时间未使用而被服务端断开。通过调整gRPC参数,如设置MaxConnectionIdle为5分钟,可以有效防止因网络proxy问题导致的连接异常关闭。
2336





