Begränsa anropsfrekvens efter nyckel

GÄLLER FÖR: Utvecklare | Grundläggande | Basic v2 | Standard | Standard v2 | Premium

Principen rate-limit-by-key förhindrar api-användningstoppar per nyckel genom att begränsa anropsfrekvensen till ett angivet tal per angiven tidsperiod. Nyckeln kan ha ett godtyckligt strängvärde och tillhandahålls vanligtvis med hjälp av ett principuttryck. Valfritt inkrementsvillkor kan läggas till för att ange vilka begäranden som ska räknas mot gränsen. När den här samtalsfrekvensen överskrids får anroparen en 429 Too Many Requests svarsstatuskod.

Information om skillnaden mellan hastighetsgränser och kvoter finns i Hastighetsgränser och kvoter.

Varning

På grund av begränsningsarkitekturens distribuerade karaktär är hastighetsbegränsningen aldrig helt korrekt. Skillnaden mellan det konfigurerade och det verkliga antalet tillåtna begäranden varierar beroende på begärandevolymen och hastigheten, svarstiden i serverdelen och andra faktorer.

Kommentar

Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. För att hjälpa dig att konfigurera den här principen tillhandahåller portalen en guidad, formulärbaserad redigerare. Läs mer om hur du anger eller redigerar API Management-principer.

Principuttryck

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   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"/> 

Attribut

Attribut beskrivning Obligatoriskt Standardvärde
Samtal Det maximala totala antalet anrop som tillåts under tidsintervallet som anges i renewal-period. Principuttryck tillåts. Ja Ej tillämpligt
counter-key Nyckeln som ska användas för principen för hastighetsbegränsning. För varje nyckelvärde används en enskild räknare för alla omfång där principen har konfigurerats. Principuttryck tillåts. Ja Ej tillämpligt
increment-condition Det booleska uttrycket som anger om begäran ska räknas mot frekvensen (true). Principuttryck tillåts. Nej Ej tillämpligt
increment-count Antalet som räknaren ökas med per begäran. Principuttryck tillåts. Nej 1
förnyelseperiod Längden i sekunder för skjutfönstret där antalet tillåtna begäranden inte ska överskrida det värde som anges i calls. Högsta tillåtna värde: 300 sekunder. Principuttryck tillåts. Ja Ej tillämpligt
retry-after-header-name Namnet på en anpassad svarsrubrik vars värde är det rekommenderade återförsöksintervallet i sekunder efter att den angivna anropsfrekvensen har överskridits. Principuttryck tillåts inte. Nej Retry-After
retry-after-variable-name Namnet på en principuttrycksvariabel som lagrar det rekommenderade återförsöksintervallet i sekunder efter att den angivna anropsfrekvensen har överskridits. Principuttryck tillåts inte. Nej Ej tillämpligt
remaining-calls-header-name Namnet på en svarsrubrik vars värde efter varje principkörning är antalet återstående anrop som tillåts för tidsintervallet som anges i renewal-period. Principuttryck tillåts inte. Nej Ej tillämpligt
remaining-calls-variable-name Namnet på en principuttrycksvariabel som efter varje principkörning lagrar antalet återstående anrop som tillåts för det tidsintervall som anges i renewal-period. Principuttryck tillåts inte. Nej Ej tillämpligt
total-calls-header-name Namnet på en svarsrubrik vars värde är det värde som anges i calls. Principuttryck tillåts inte. Nej Ej tillämpligt

Användning

Användningsanteckningar

  • Frekvensgränsantal i en lokalt installerad gateway kan konfigureras för att synkronisera lokalt (bland gatewayinstanser mellan klusternoder), till exempel via Helm-diagramdistribution för Kubernetes eller med hjälp av Distributionsmallar för Azure-portalen. Frekvensgränsantal synkroniseras dock inte med andra gatewayresurser som konfigurerats i API Management-instansen, inklusive den hanterade gatewayen i molnet. Läs mer

Exempel

I följande exempel styrs hastighetsgränsen på 10 anrop per 60 sekunder av anroparens IP-adress. Efter varje principkörning lagras de återstående anropen som tillåts under tidsperioden i variabeln remainingCallsPerIP.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key  calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Mer information och exempel på den här principen finns i Avancerad begränsning av begäranden med Azure API Management.

Mer information om hur du arbetar med principer finns i: