首页 文章

APIM结合限制政策方法

提问于
浏览
0

在APIM目前,我们有产品订阅密钥级别限制 . 但显然,如果我们在同一产品中有多个API,则一个API可能会消耗超出预期的配额,并阻止其他人使用该应用程序 . 因此,根据MS文档(https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling),我们可以使用组合策略 .

问题是这种方法我们是否可以使用如下,

API-1 300 calls per 60 seconds where product subscription key =123
API-2 200 calls per 60 seconds where product subscription key =123
API-3 200 calls per 60 seconds where product subscription key =123

如果是这样,产品订阅密钥的总呼叫数可能是多少?如果它有意义 .

我采取了以下方法来制定组合政策 . 但它不喜欢 .

<rate-limit-by-key calls="50" renewal-period="60" counter-key="@(&quot;somevalue&quot; + context.Request.Headers.GetValueOrDefault(&quot;Ocp-Apim-Subscription-Key&quot;))" />
<rate-limit calls="10" renewal-period="30">  
    <api name="AddressSearch API dev" calls="5" renewal-period="30" />  
        <operation name="Search_GetAddressSuggestions" calls="3" renewal-period="30" />
</rate-limit>

2 回答

  • 0

    重要的是要了解按键限制和速率限制的计数器是独立的 .

    当按键限制允许请求通过时,它会增加's counter. When rate-limit allows request to pass it increases it' s计数器 s . 在您的配置中,将不执行速率限制按键限制请求速率限制,并且不会计算请求 .

    这意味着在大多数情况下,下限获胜 . 您的配置将允许一个订阅每分钟拨打50个电话,但它不太可能有任何区别,因为第二个限速策略将在10次调用同一产品后扼制,因此第一个订阅策略将没有任何机会做任何事情 .

    如果您需要样本中的限制,可以按如下方式使用配置:

    <rate-limit calls="0" renewal-period="0">  
        <api name="API-1" calls="100" renewal-period="60" />  
        <api name="API-2" calls="200" renewal-period="60" />  
        <api name="API-3" calls="300" renewal-period="60" />  
    </rate-limit>
    
  • 0

    只是为了确认 - 您正在基于订阅密钥在API级别设置三个限制策略:

    API-1: 300 calls per 60 seconds API-2: 200 calls per 60 seconds API-3: 200 calls per 60 seconds

    在这种情况下,如果这些是您唯一的API,则每60秒每个订阅密钥的最大请求数为:300 200 200 = 700 .

    如果您有更多的API,除非您为它们指定策略,否则它们不会受到限制 .

相关问题