all SubConns are in TransientFailure, latest connection error: 報錯,golang grpc

這是一個報錯,引起的

all SubConns are in TransientFailure, latest connection error: <nil> #2636git

上面的信息。github

我搜索了下。golang

https://github.com/grpc/grpc-go/issues/2636編程

這裏寫到了: GRPC_GO_REQUIRE_HANDSHAKE=offgoogle

因此下面的文章 也提到了。這個是對的。spa

個別的可能性是註冊中心地址不對:GRPChttp請求遇到的異常(all SubConns are in TransientFailure, latest connection error: connection closed)。code

也有能夠以下是版本問題。server

引用自:Jiajun的編程隨想。開發

在 這個issue 裏所提到的feature實現以前,Go的gRPC實現裏, 客戶端和服務端握手過程當中,客戶端並不會等待HTTP/2協議握手完成以後纔開始交互,所以Go的gRPC v1.18以後開始 改變這種行爲,實現前面所說的這個feature。然而,這就引入了一個不兼容問題,也引入了一大堆bug。很不幸,我就 踩中了。rpc

這個feature能夠經過設置 GRPC_GO_REQUIRE_HANDSHAKE=on 這個環境變量來開啓,也能夠經過設置 GRPC_GO_REQUIRE_HANDSHAKE=off 來關閉。

開發一個gRPC應用的時候,客戶端不斷的報錯:

error: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: timed out waiting for server handshake

這個錯誤我之前遇到過,而後就想着設置 GRPC_GO_REQUIRE_HANDSHAKE=off 來解決,而後發現並無用,通過一番查閱以後,發現 原來是在所使用的版本里,即使設置這個環境變量,也沒有用:

google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55
google.golang.org/grpc v1.23.0

解決方案就是降級版本:

google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107
google.golang.org/grpc v1.19.0

順帶,還要設置環境變量 GRPC_GO_REQUIRE_HANDSHAKE=off

相關文章
相關標籤/搜索