1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
當(dāng)您調(diào)用grpc.Dial
連接到服務(wù)器并收到一個(gè)grpc.ClientConn
時(shí),它會(huì)自動(dòng)為您處理重新連接。當(dāng)您調(diào)用方法或請(qǐng)求流時(shí),如果無(wú)法連接到服務(wù)器或處理請(qǐng)求時(shí)出錯(cuò),它將失敗。
如果錯(cuò)誤表明是網(wǎng)絡(luò)問(wèn)題,您可以重試幾次。您可以在此處查看 grpc 狀態(tài)代碼https://github.com/grpc/grpc-go/blob/master/codes/codes.go#L31并使用以下方法從返回的錯(cuò)誤中提取它們status.FromError
:https://pkg.go .dev/google.golang.org/grpc/status#FromError
您還可以grpc.WaitForReady
選擇 ( https://pkg.go.dev/google.golang.org/grpc#WaitForReady ),如果它處于暫時(shí)性故障,可用于阻止 grpc 調(diào)用,直到服務(wù)器準(zhǔn)備就緒。在那種情況下,您不需要重試,但您可能應(yīng)該添加一個(gè)超時(shí)來(lái)取消上下文以控制您保持阻塞的時(shí)間。
如果您甚至想避免嘗試調(diào)用服務(wù)器,您可以使用ClientConn.WaitForStateChange
(這是實(shí)驗(yàn)性的)來(lái)檢測(cè)任何狀態(tài)更改并調(diào)用ClientConn.GetState
以確定連接處于什么狀態(tài),以了解何時(shí)可以安全地再次開(kāi)始調(diào)用服務(wù)器。
- 1 回答
- 0 關(guān)注
- 286 瀏覽
添加回答
舉報(bào)