本文為您詳細介紹逾時配置方式。
逾時配置方式
說明
讀逾時配置優先順序:Request對象設定 -> Client設定 -> Config設定 -> Core SDK預設配置 -> 全域預設配置,優先順序依次降低。
連線逾時配置優先順序:Request對象設定 -> Client設定 -> 全域預設配置,優先順序依次降低。
使用預設配置。預設連線逾時為5秒,讀逾時為10秒。
重要在Go Core SDK中,對部分OpenAPI的讀逾時進行了特殊配置。若OpenAPI存在該特殊配置,則使用該特殊配置作為預設配置。具體配置資訊,請參見api_timeout.go。
通過Request對象佈建要求逾時,只對當前請求有效。
import ( "fmt" "os" "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials" ecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" ) func main() { config := sdk.NewConfig() // 使用RAM使用者AccessKeyID和AccessKeySecret credential := credentials.NewAccessKeyCredential(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) client, err := ecs.NewClientWithOptions("cn-hangzhou", config, credential) if err != nil { panic(err) } // 建立請求 request := ecs.CreateDescribeRegionsRequest() // 佈建要求逾時時間(僅對當前請求有效) request.SetConnectTimeout(10 * time.Second) request.SetReadTimeout(5 * time.Second) // 佈建要求協議為https request.Scheme = "https" // 請求參數 request.InstanceChargeType = "PrePaid" // 執行個體的計費方式 request.ResourceType = "instance" // 資源類型 // 發起請求並擷取傳回值 response, err := client.DescribeRegions(request) if err != nil { fmt.Print(err.Error()) } fmt.Printf("response is %#v\n", response) }通過Client佈建要求逾時,對所有通過該Client發送的請求都生效。
import ( "fmt" "os" "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials" ecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" ) func main() { config := sdk.NewConfig() // 使用RAM使用者AccessKeyID和AccessKeySecret credential := credentials.NewAccessKeyCredential(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) client, err := ecs.NewClientWithOptions("cn-hangzhou", config, credential) if err != nil { panic(err) } // 設定用戶端逾時(對所有通過該用戶端發送的請求生效) client.SetConnectTimeout(10 * time.Second) client.SetReadTimeout(5 * time.Second) // 建立請求 request := ecs.CreateDescribeRegionsRequest() // 佈建要求協議為https request.Scheme = "https" // 請求參數 request.InstanceChargeType = "PrePaid" // 執行個體的計費方式 request.ResourceType = "instance" // 資源類型 // 發起請求並擷取傳回值 response, err := client.DescribeRegions(request) if err != nil { fmt.Print(err.Error()) } fmt.Printf("response is %#v\n", response) }在用戶端初始化時,通過Config佈建要求讀逾時時間,對所有通過該Config初始化的Client都生效。
import ( "fmt" "os" "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials" ecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" ) func main() { config := sdk.NewConfig() // 通過Config設定讀逾時時間 config.Timeout = 5 * time.Second // 使用RAM使用者AccessKeyID和AccessKeySecret credential := credentials.NewAccessKeyCredential(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) client, err := ecs.NewClientWithOptions("cn-hangzhou", config, credential) if err != nil { panic(err) } // 建立請求 request := ecs.CreateDescribeRegionsRequest() // 佈建要求協議為https request.Scheme = "https" // 請求參數 request.InstanceChargeType = "PrePaid" // 執行個體的計費方式 request.ResourceType = "instance" // 資源類型 // 發起請求並擷取傳回值 response, err := client.DescribeRegions(request) if err != nil { fmt.Print(err.Error()) } fmt.Printf("response is %#v\n", response) }