Dela via


Begränsa anropsfrekvens efter nyckel

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

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 för nyckelvärdet 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 för nyckelvärdet. 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 för nyckelvärdet. 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 nyckelvärdet i 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 nyckelvärdet i tidsintervallet 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

  • API Management använder en enskild räknare för varje counter-key värde som du anger i principen. Räknaren uppdateras i alla omfång där principen har konfigurerats med det nyckelvärdet. Om du vill konfigurera separata räknare i olika omfång (till exempel ett specifikt API eller en specifik produkt) anger du olika nyckelvärden i de olika omfången. Du kan till exempel lägga till en sträng som identifierar omfånget till värdet för ett uttryck.
  • 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 Azure Portal distributionsmallar. 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 anrop som tillåts för anroparens IP-adress 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: