依訂用帳戶限制呼叫率

適用於:所有 API 管理 層

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 可以透過 nameid 參考。 如果同時提供兩個屬性,則會使用 id 而忽略 name No
作業 新增一個或多個這些元素,以對 API 內的作業強加呼叫頻率限制。 產品、API 和作業呼叫頻率限制會獨立套用。 作業可以透過 nameid 參考。 如果同時提供兩個屬性,則會使用 id 而忽略 name No

api 屬性

屬性 描述 是必要欄位 預設
NAME 要套用速率限制的 API 名稱。 必須指定 nameid 其中之一。 N/A
id 要套用速率限制的 API 識別碼。 必須指定 nameid 其中之一。 N/A
通話 renewal-period 中指定的時間週期內允許的呼叫總數上限。 不允許使用原則運算式。 Yes N/A
renewal-period 滑動視窗的長度,其中允許的要求數目不應超過 calls 中指定的值。 允許的最大值:300 秒。 不允許使用原則運算式。 Yes N/A

作業屬性

屬性 描述 是必要欄位 預設
NAME 要套用速率限制的作業名稱。 必須指定 nameid 其中之一。 N/A
id 要套用速率限制的作業識別碼。 必須指定 nameid 其中之一。 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>

如需使用原則的詳細資訊,請參閱: