【Azure API 管理】APIM中的Policy是否有调用速率的方法(熔断机制) - LuBu0505/My-Code GitHub Wiki

问题描述

APIM中的Policy是否有调用速率的方法(熔断机制)

问题解答

APIM的限制速率的方式有以下方式:

rate-limit-by-key 策略可以对调用速率进行限制,使指定时段的调用不超出指定的数目,避免单个密钥的 API 使用量暴增。 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥。 可以添加可选增量条件,指定在决定是否到达限制值时应该进行计数的请求。 超过此调用速率时,调用方会收到 429 Too Many Requests 响应状态代码。

如果需要基于后端应用响应时间来判断,可以通过在inbound和outbound中分别设置当前的时间戳并在increment condition中判断两个时间戳的差值来判断后台响应时间。

示例如:

<policies>
    <inbound>
        <base />
        <set-variable name="intime" value="@(DateTime.Now)" />
        <rate-limit-by-key calls="5" renewal-period="10" counter-key="@(context.Subscription?.Key ?? "anonymous")" increment-condition="@(Convert.ToDouble((context.Variables.GetValueOrDefault<DateTime>("outtime") - context.Variables.GetValueOrDefault<DateTime>("intime")).TotalMilliseconds.ToString()) > 5000 )" /> </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <set-variable name="outtime" value="@(DateTime.Now)" />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

说明:

此policy会探测10秒内是否有5个请求“响应时间”超过5s,如果超过则限流。(这个响应时间为执行两次set-variable的时间,分别发生在执行inbound策略和outbound策略时)

参考资料

API Management policy expressions:https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#CLRTypes

按密钥限制调用速率 : https://docs.azure.cn/zh-cn/api-management/api-management-access-restriction-policies#LimitCallRateByKey

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

分类: 【Azure API 管理】

标签: APIMPolicy Limit Raterate-limit-by-key

⚠️ **GitHub.com Fallback** ⚠️