如果HTTP错误429,az cli命令是否可以自动重试

问题描述

我观察到,只有将--debug标志传递给z命令时,az命令才会打印http标头。 例如

az storage account list --debug

并且标头打印到stderr,stdout不包含任何内容。

在使用HTTP 429的情况下,如果出现太多错误错误,则指南是在Retry-After响应标头中提到的间隔之后重试。

是否有任何机制可以使az cli在HTTP 429错误的情况下自动重试API?

编辑-重试内置到z命令中

urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=3,connect=4,read=4,redirect=None,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=2,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=1,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=0,status=None)

解决方法

根据到目前为止收到的响应,答案为“否”,并且调用方必须运行带有--debug选项的z命令并解析stderr。这是示例Groovy代码。

var ans = rs.OrderBy(r => r.Values.OrderBy(rv => rv.key.ColumnValidation.display_order)
                                  .First()
                                  .value)
            .ToList();

这是样本回复。

def pat = /'Retry-After': '(\d+)'/
stderr.split("\n").each { line ->
    def m = line =~ pat
    if (m.size() > 0 && m.hasGroup()) {
       retryAfterDuration = Integer.parseInt(m[0][1])
       println("Found Retry-After header,value = ${retryAfterDuration}")
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...