超时机制
更新时间:
本文为您详细介绍超时配置方式。
超时配置方式
说明
读超时配置优先级: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) }
文档内容是否对您有帮助?