限制 Resource Manager 请求数

对于每个订阅和租户,Resource Manager 将读取请求数限制为 15,000/小时,将写入请求数限制为 1,200/小时。 这些限制适用于每个 Azure 资源管理器实例;每个 Azure 区域中有多个实例,Azure 资源管理器部署到所有 Azure 区域。 因此,在实践中,限制实际上比上面列出的要高得多,因为用户请求通常是由多个不同的实例提供服务。

如果应用程序或脚本达到了这些限制,则需对请求数进行限制。 本主题介绍如何在达到限制之前确定剩余的请求数,以及在达到限制后如何响应。

达到限制时,会收到 HTTP 状态代码“429 请求过多”。

请求数仅限于订阅或租户。 如果订阅中有多个并发应用程序在进行请求,则会将这些应用程序发出的请求加在一起来确定剩余请求数。

订阅范围的请求是需要传递订阅 ID 的请求,例如在订阅中检索资源组。 租户范围的请求是指不包括订阅 ID 的请求,例如检索有效的 Azure 位置。

剩余请求数

可以通过检查响应标头确定剩余请求数。 每个请求都包含剩余读取和写入请求数的值。 下表说明了各种响应标头,用户可以检查其中是否存在这些值:

响应标头 说明
x-ms-ratelimit-remaining-subscription-reads 订阅范围的剩余读取数
x-ms-ratelimit-remaining-subscription-writes 订阅范围的剩余写入数
x-ms-ratelimit-remaining-tenant-reads 租户范围的剩余读取数
x-ms-ratelimit-remaining-tenant-writes 租户范围的剩余写入数
x-ms-ratelimit-remaining-subscription-resource-requests 划归到订阅的剩余资源类型请求数。

仅当服务重写了默认限制时,才返回此标头值。 Resource Manager 将累加此值而不是订阅读取/写入数。
x-ms-ratelimit-remaining-subscription-resource-entities-read 划归到订阅的剩余资源类型集合请求数。

仅当服务重写了默认限制时,才返回此标头值。 此值提供剩余集合请求数(列出资源)。
x-ms-ratelimit-remaining-tenant-resource-requests 划归到租户的剩余资源类型请求数。

仅当服务重写了默认限制时,才为租户级别的请求添加此标头。 Resource Manager 将累加此值而不是租户读取/写入数。
x-ms-ratelimit-remaining-tenant-resource-entities-read 划归到租户的剩余资源类型集合请求数。

仅当服务重写了默认限制时,才为租户级别的请求添加此标头。

检索标头值

在代码或脚本中检索这些标头值与检索任何标头值无异。

例如,在 C# 中,可使用以下代码从名为 responseHttpWebResponse 对象中检索标头值:

response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)

PowerShell中,可以通过 Invoke-WebRequest 操作检索标头值。

$r = Invoke-WebRequest -Uri https://management.chinacloudapi.cn/subscriptions/{guid}/resourcegroups?api-version=2016-09-01 -Method GET -Headers $authHeaders
$r.Headers["x-ms-ratelimit-remaining-subscription-reads"]

或者,如果想要查看剩余请求数以进行调试,可以在 PowerShell cmdlet 中提供 -Debug 参数。

Get-AzureRmResourceGroup -Debug

这会返回许多值,包括以下响应值:

...
DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-reads: 14999
...

Azure CLI中,可以使用更详细的选项检索标头值。

azure group list -vv --json

这会返回许多值,包括以下对象:

...
silly: returnObject
{
  "statusCode": 200,
  "header": {
    "cache-control": "no-cache",
    "pragma": "no-cache",
    "content-type": "application/json; charset=utf-8",
    "expires": "-1",
    "x-ms-ratelimit-remaining-subscription-reads": "14998",
    ...

在发送下一请求之前等待

达到请求限制时,Resource Manager 会在标头中返回 429 HTTP 状态代码和 Retry-After 值。 Retry-After 值指定在发送下一个请求之前应用程序应该等待(或休眠)的秒数。 如果在重试值所对应的时间尚未用完之前发送请求,则系统不会处理该请求,而会返回新的重试值。

后续步骤