天天看點

grpc服務異常情況的執行流程

請先閱讀 grpc的dial正常執行流程

預設配置情況下(還有其它沒有提到的配置都取預設值):

  1. 設定了balancer(etcd等)
  2. 沒有設定WithBlock,即dialOptions.block = false
  3. 沒有設定FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError = false

分為以下幾種異常情況說明

  1. dial的時候,叢集服務位址為空

    這個時候會走到A1,傳回錯誤 errNoAddr = errors.New("grpc: there is no address available to dial")

  2. dial的時候叢集的一個服務挂了,但是沒有從balancer(etcd等)去掉

    這個時候執行流程 A-A2–A22, 會在A22一直循環重試連接配接這個位址,并且每次重試間隔增長至最大值(120s)

  3. 已經連接配接正常了,在運作時候叢集的一個服務挂了,但是沒有從balancer(etcd等)去掉

    這個時候執行流程 A2242-A233–A22, 會在A22一直循環重試連接配接這個位址,并且每次重試間隔增長至最大值(120s)

  4. 已經連接配接正常了,服務也是正常的,這個時候從balancer(etcd等)去掉一個位址

    這個時候執行流程A3-A34-A231,結束

  5. 對于情況2,如果接下來從balancer(etcd等)去掉

    這個時候執行流程A3-A34-A221,結束

  6. 對于情況3,如果接下來從balancer(etcd等)去掉

    這個時候執行流程A3-A34-A233,結束

繼續閱讀