在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="@("somevalue" + context.Request.Headers.GetValueOrDefault("Ocp-Apim-Subscription-Key"))" />
<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 回答
重要的是要了解按键限制和速率限制的计数器是独立的 .
当按键限制允许请求通过时,它会增加's counter. When rate-limit allows request to pass it increases it' s计数器 s . 在您的配置中,将不执行速率限制按键限制请求速率限制,并且不会计算请求 .
这意味着在大多数情况下,下限获胜 . 您的配置将允许一个订阅每分钟拨打50个电话,但它不太可能有任何区别,因为第二个限速策略将在10次调用同一产品后扼制,因此第一个订阅策略将没有任何机会做任何事情 .
如果您需要样本中的限制,可以按如下方式使用配置:
只是为了确认 - 您正在基于订阅密钥在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,除非您为它们指定策略,否则它们不会受到限制 .