亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果服務器在客戶端的 gRPC 中不可用,等待的方法

如果服務器在客戶端的 gRPC 中不可用,等待的方法

Go
守著一只汪 2023-01-03 17:21:59
我希望讀這篇文章的人都過得很好。這是我想知道的一個場景:有一個全局 ClientConn 用于對服務器的所有 grpc 請求。然后那個服務器宕機了。我想知道是否有一種方法可以等待此服務器超時,以便在這種情況下使用 grpc 對故障(瞬態故障或服務器停機)更具彈性。我在想,如果 clientConn 狀態正在連接或暫時性故障,并且如果在 clientConn 狀態是暫時性故障時發生超時,則繼續循環,然后返回錯誤,因為服務器可能已關閉。我想知道如果客戶端有多個請求需要這個 ClientConn 那么這是否可行,那么多個 go 例程將運行這個循環。將不勝感激任何其他選擇、建議或忠告。
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

當您調用grpc.Dial連接到服務器并收到一個grpc.ClientConn時,它會自動為您處理重新連接。當您調用方法或請求流時,如果無法連接到服務器或處理請求時出錯,它將失敗。

如果錯誤表明是網絡問題,您可以重試幾次。您可以在此處查看 grpc 狀態代碼https://github.com/grpc/grpc-go/blob/master/codes/codes.go#L31并使用以下方法從返回的錯誤中提取它們status.FromErrorhttps://pkg.go .dev/google.golang.org/grpc/status#FromError

您還可以grpc.WaitForReady選擇 ( https://pkg.go.dev/google.golang.org/grpc#WaitForReady ),如果它處于暫時性故障,可用于阻止 grpc 調用,直到服務器準備就緒。在那種情況下,您不需要重試,但您可能應該添加一個超時來取消上下文以控制您保持阻塞的時間。

如果您甚至想避免嘗試調用服務器,您可以使用ClientConn.WaitForStateChange(這是實驗性的)來檢測任何狀態更改并調用ClientConn.GetState以確定連接處于什么狀態,以了解何時可以安全地再次開始調用服務器。


查看完整回答
反對 回復 2023-01-03
  • 1 回答
  • 0 關注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號