全部產品
Search
文件中心

Alibaba Cloud SDK:逾時機制

更新時間:Jul 01, 2024

本文為您詳細介紹逾時配置方式。

逾時配置方式

說明

讀逾時配置優先順序: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)
    }