依訂用帳戶限制呼叫率
適用於:所有 APIM 層
rate-limit
原則藉由將指定時間週期內的呼叫頻率限制為指定次數,以防止每個訂用帳戶的 API 使用量暴增。 達到速率限制時,呼叫端會收到 429 Too Many Requests
回應狀態碼。
若要瞭解速率限制和配額之間的差異,請參閱速率限制和配額。
警告
由於節流架構的分散本質,速率限制永遠不會完全精確。 已設定的允許要求數目,與實際允許的要求數目之間的差異,取決於要求的數量和速率、後端延遲和其他因素。
注意
請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。
原則陳述式
<rate-limit calls="number" renewal-period="seconds" retry-after-header-name="custom header name, replaces default 'Retry-After'"
retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name"
remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name">
<api name="API name" id="API id" calls="number" renewal-period="seconds" >
<operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
</api>
</rate-limit>
屬性
屬性 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
通話 | 在 renewal-period 中指定的時間週期內允許的呼叫總數上限。 不允許使用原則運算式。 |
Yes | N/A |
renewal-period | 滑動視窗的長度,其中允許的要求數目不應超過 calls 中指定的值。 允許的最大值:300 秒。 不允許使用原則運算式。 |
Yes | N/A |
retry-after-header-name | 自訂回應標頭的名稱,其值是超過指定呼叫率之後,以秒為單位的建議重試間隔。 不允許使用原則運算式。 | No | Retry-After |
retry-after-variable-name | 超過指定呼叫率之後,以秒為單位儲存建議重試間隔的變數名稱。 不允許使用原則運算式。 | No | N/A |
remaining-calls-header-name | 回應標頭的名稱,每個原則執行之後的值都是對於在 renewal-period 中指定的時間間隔允許的剩餘呼叫次數。 不允許使用原則運算式。 |
No | N/A |
remaining-calls-variable-name | 變數的名稱,每個原則執行之後的變數都是對於在 renewal-period 中指定的時間間隔允許的剩餘呼叫次數。 不允許使用原則運算式。 |
No | N/A |
total-calls-header-name | 回應標頭的名稱,其值為 中指定的 calls 值。 不允許使用原則運算式。 |
No | N/A |
元素
元素 | 描述 | 必要 |
---|---|---|
api | 新增一個或多個這些元素,以對產品內的 API 強加呼叫頻率限制。 產品和 API 呼叫頻率限制會獨立套用。 API 可以透過 name 或 id 參考。 如果同時提供兩個屬性,則會使用 id 而忽略 name 。 |
No |
作業 | 新增一個或多個這些元素,以對 API 內的作業強加呼叫頻率限制。 產品、API 和作業呼叫頻率限制會獨立套用。 作業可以透過 name 或 id 參考。 如果同時提供兩個屬性,則會使用 id 而忽略 name 。 |
No |
api 屬性
屬性 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
NAME | 要套用速率限制的 API 名稱。 | 必須指定 name 或 id 其中之一。 |
N/A |
id | 要套用速率限制的 API 識別碼。 | 必須指定 name 或 id 其中之一。 |
N/A |
通話 | 在 renewal-period 中指定的時間週期內允許的呼叫總數上限。 不允許使用原則運算式。 |
Yes | N/A |
renewal-period | 滑動視窗的長度,其中允許的要求數目不應超過 calls 中指定的值。 允許的最大值:300 秒。 不允許使用原則運算式。 |
Yes | N/A |
作業屬性
屬性 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
NAME | 要套用速率限制的作業名稱。 | 必須指定 name 或 id 其中之一。 |
N/A |
id | 要套用速率限制的作業識別碼。 | 必須指定 name 或 id 其中之一。 |
N/A |
通話 | 在 renewal-period 中指定的時間週期內允許的呼叫總數上限。 不允許使用原則運算式。 |
Yes | N/A |
renewal-period | 滑動視窗的長度,其中允許的要求數目不應超過 calls 中指定的值。 允許的最大值:300 秒。 不允許使用原則運算式。 |
Yes | N/A |
使用方式
使用注意事項
- 每份原則定義只能使用此原則一次。
- 只有在使用訂用帳戶金鑰存取 API 時,才會套用此原則。
- 自我裝載閘道中的速率限制計數可以設定為在本機同步處理 (在叢集節點之間的閘道執行個體之間),例如,透過適用於 Kubernetes 的 Helm 圖表部署或使用 Azure 入口網站部署範本。 不過,頻率限制計數不會與 APIM 執行個體中設定的其他閘道資源 (包括雲端中的受控閘道) 同步。 深入了解
範例
在下列範例中,每個訂閱的速率限制是每 90 秒 20 次呼叫。 在每個原則執行之後,時間週期中允許的其餘呼叫會儲存在變數 remainingCallsPerSubscription
中。
<policies>
<inbound>
<base />
<rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱:
- 教學課程:轉換及保護 API
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- Azure API 管理 原則工具組
- 使用 Microsoft Azure Copilot 撰寫原則