文档

超时机制

更新时间:
一键部署

本文为您详细介绍超时配置方式。

超时配置方式

说明

读超时配置优先级: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)
    }