重试机制

更新时间:

本节主要介绍V2.0 Go SDK的重试机制配置方式。

说明

在V2.0 SDK中,OpenAPI请求的处理逻辑内置了网络异常重试逻辑,即当遇到网络异常问题时,系统会自动尝试重新发起请求,以确保服务的稳定性和可靠性。若请求因业务逻辑错误而报错,例如参数错误、资源不存在等情况,SDK将不会执行重试操作,这是因为业务层面的错误通常需要应用程序根据具体的错误信息做出相应的处理或调整,而非简单地重复尝试。

重试机制配置方式

说明

超时机制配置优先级:RuntimeOption配置 -> 默认,优先级依次降低。

  • 使用默认配置。默认情况下不会进行重试,如果打开重试配置且未配置重试次数,则默认最多重试3次。

  • 通过运行时参数(RuntimeOptions)配置重试机制。

    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{
    		// 从环境变量获取RAM用户的AccessKey ID
    		AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    		// 从环境变量获取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{}
    	// 创建RuntimeObject实例并设置运行参数。
    	runtime := &util.RuntimeOptions{}
    	// 开启自动重试机制
    	runtime.Autoretry = tea.Bool(true)
    	// 设置自动重试次数
    	runtime.MaxAttempts = tea.Int(3)
    	resp, _err := client.DescribeRegionsWithOptions(describeRegionsRequest, runtime)
    	if _err != nil {
    		panic(_err)
    	}
    	// response 包含服务端响应的 body 和 headers
    	body, err := json.Marshal(resp.Body)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Printf("body: %s\n", string(body))
    }