重試機(jī)制
更新時(shí)間:
本節(jié)主要介紹V2.0 Go SDK的重試機(jī)制配置方式。
說(shuō)明
在V2.0 SDK中,OpenAPI請(qǐng)求的處理邏輯內(nèi)置了網(wǎng)絡(luò)異常重試邏輯,即當(dāng)遇到網(wǎng)絡(luò)異常問(wèn)題時(shí),系統(tǒng)會(huì)自動(dòng)嘗試重新發(fā)起請(qǐng)求,以確保服務(wù)的穩(wěn)定性和可靠性。若請(qǐng)求因業(yè)務(wù)邏輯錯(cuò)誤而報(bào)錯(cuò),例如參數(shù)錯(cuò)誤、資源不存在等情況,SDK將不會(huì)執(zhí)行重試操作,這是因?yàn)闃I(yè)務(wù)層面的錯(cuò)誤通常需要應(yīng)用程序根據(jù)具體的錯(cuò)誤信息做出相應(yīng)的處理或調(diào)整,而非簡(jiǎn)單地重復(fù)嘗試。
重試機(jī)制配置方式
說(shuō)明
超時(shí)機(jī)制配置優(yōu)先級(jí):RuntimeOption配置 -> 默認(rèn),優(yōu)先級(jí)依次降低。
使用默認(rèn)配置。默認(rèn)情況下不會(huì)進(jìn)行重試,如果打開(kāi)重試配置且未配置重試次數(shù),則默認(rèn)最多重試3次。
通過(guò)運(yùn)行時(shí)參數(shù)(RuntimeOptions)配置重試機(jī)制。
package main import ( "encoding/json" "fmt" "os" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" ) func main() { config := &openapi.Config{ // 從環(huán)境變量獲取RAM用戶的AccessKey ID AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), // 從環(huán)境變量獲取RAM用戶的AccessKey Secret AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), // Region ID RegionId: tea.String("<RegionId>"), } client, _err := ecs20140526.NewClient(config) if _err != nil { panic(_err) } describeRegionsRequest := &ecs20140526.DescribeRegionsRequest{} // 創(chuàng)建RuntimeObject實(shí)例并設(shè)置運(yùn)行參數(shù)。 runtime := &util.RuntimeOptions{} // 開(kāi)啟自動(dòng)重試機(jī)制 runtime.Autoretry = tea.Bool(true) // 設(shè)置自動(dòng)重試次數(shù) runtime.MaxAttempts = tea.Int(3) resp, _err := client.DescribeRegionsWithOptions(describeRegionsRequest, runtime) if _err != nil { panic(_err) } // response 包含服務(wù)端響應(yīng)的 body 和 headers body, err := json.Marshal(resp.Body) if err != nil { panic(err) } fmt.Printf("body: %s\n", string(body)) }
文檔內(nèi)容是否對(duì)您有幫助?