开发者社区 问答 正文

阿里云OpenAPI 这是个布尔值,没说重试几下吧?

阿里云OpenAPI 这是个布尔值,没说重试几下吧?可与业务判断,但类似的接口很多,如果能通过参数统一控制比较方便。

展开
收起
三分钟热度的鱼 2023-08-08 15:56:19 85 分享 版权
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    它只有开启与关闭两种状态,无法设置具体的重试次数或间隔。

    阿里云 OpenAPI 并没有提供统一的参数来设置接口调用的自动重试策略。

    但实际上,你可以通过自定义的错误拦截器实现自动重试的功能。

    比如你的代码可以这样写:

    go
    Copy
    func myInterceptor(ctx context.Context, err error, info request.Info) (error, bool) {
    if info.Retryable {
    // 429 或 500 等状态码可以重试
    // 设置重试策略,比如 3 次,间隔 1 秒
    retryCounter := 0
    for retryCounter < 3 {
    time.Sleep(1000
    time.Millisecond)
    retryCounter++
    }
    }
    return err, false
    }

    client := client.NewClientWithOptions(map[string]interface{}{
    "Interceptors": myInterceptor,
    })
    这个拦截器函数做了如下事情:

    检查是否可以重试(根据状态码)
    设置重试 3 次,间隔 1 秒的策略
    重试次数用变量 retryCounter 记录
    每次重试后等待 1 秒
    重试 3 次后,还是返回错误
    然后你再传入这个拦截器给客户端:

    Interceptors": myInterceptor

    这样一来,所有接口调用都会被这个拦截器拦截,实现你想要的自动重试逻辑。

    综上所述,尽管阿里云 OpenAPI 并没有直接的请求参数来设置自动重试。但通过自定义拦截器函数,还是可以简单实现。

    2023-08-08 20:20:41
    赞同 展开评论
  • 自动重试三次。MaxAttempts是配置重试次数。此回答整理自钉群“OpenAPI 开发者门户 - 值班服务群2群”

    2023-08-08 16:02:33
    赞同 展开评论