Gespreksfrequentie per sleutel beperken

VAN TOEPASSING OP: Ontwikkelaar | Basic | Basic v2 | Standaard | Standard v2 | Premium

Het rate-limit-by-key beleid voorkomt pieken in API-gebruik per sleutel door de aanroepsnelheid te beperken tot een opgegeven nummer per opgegeven periode. De sleutel kan een willekeurige tekenreekswaarde hebben en wordt doorgaans opgegeven met behulp van een beleidsexpressie. Optionele incrementele voorwaarde kan worden toegevoegd om op te geven welke aanvragen moeten worden meegeteld voor de limiet. Wanneer deze aanroepsnelheid wordt overschreden, ontvangt de aanroeper een 429 Too Many Requests antwoordstatuscode.

Zie Frequentielimieten en quota voor meer informatie over het verschil tussen frequentielimieten en quota .

Let op

Vanwege de gedistribueerde aard van de beperkingsarchitectuur is snelheidsbeperking nooit volledig nauwkeurig. Het verschil tussen geconfigureerde aanvragen en het werkelijke aantal toegestane aanvragen varieert op basis van aanvraagvolume en -frequentie, back-endlatentie en andere factoren.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Om u te helpen dit beleid te configureren, biedt de portal een begeleide editor op basis van formulieren. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

<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"/> 

Kenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
Oproepen Het maximumaantal aanroepen dat is toegestaan tijdens het tijdsinterval dat is opgegeven in de renewal-period. Beleidsexpressies zijn toegestaan. Ja N.v.t.
tellertoets De sleutel die moet worden gebruikt voor het beleid voor frequentielimieten. Voor elke sleutelwaarde wordt één teller gebruikt voor alle bereiken waarop het beleid is geconfigureerd. Beleidsexpressies zijn toegestaan. Ja N.v.t.
incrementele voorwaarde De Boole-expressie die aangeeft of de aanvraag moet worden meegeteld voor de snelheid (true). Beleidsexpressies zijn toegestaan. Nee N.v.t.
increment-count Het getal waarmee de teller per aanvraag wordt verhoogd. Beleidsexpressies zijn toegestaan. Nee 1
verlengingsperiode De lengte in seconden van het schuifvenster waarin het aantal toegestane aanvragen niet groter mag zijn dan de waarde die is opgegeven in calls. Maximaal toegestane waarde: 300 seconden. Beleidsexpressies zijn toegestaan. Ja N.v.t.
naam na koptekst opnieuw proberen De naam van een aangepaste antwoordheader waarvan de waarde het aanbevolen interval voor opnieuw proberen is in seconden nadat de opgegeven aanroepsnelheid is overschreden. Beleidsexpressies zijn niet toegestaan. Nee Retry-After
naam na variabele opnieuw proberen De naam van een beleidsexpressievariabele waarin het aanbevolen interval voor opnieuw proberen in seconden wordt opgeslagen nadat de opgegeven gespreksfrequentie is overschreden. Beleidsexpressies zijn niet toegestaan. Nee N.v.t.
resterende aanroepen-header-naam De naam van een antwoordheader waarvan de waarde na elke beleidsuitvoering het aantal resterende aanroepen is dat is toegestaan voor het tijdsinterval dat is opgegeven in de renewal-period. Beleidsexpressies zijn niet toegestaan. Nee N.v.t.
resterende aanroepen-variabele-naam De naam van een beleidsexpressievariabele die na elke beleidsuitvoering het aantal resterende aanroepen opslaat dat is toegestaan voor het tijdsinterval dat is opgegeven in de renewal-period. Beleidsexpressies zijn niet toegestaan. Nee N.v.t.
total-calls-header-name De naam van een antwoordheader waarvan de waarde de waarde is die is opgegeven in calls. Beleidsexpressies zijn niet toegestaan. Nee N.v.t.

Gebruik

Gebruiksnotities

  • Frequentielimietaantallen in een zelf-hostende gateway kunnen worden geconfigureerd om lokaal te synchroniseren (tussen gateway-exemplaren tussen clusterknooppunten), bijvoorbeeld via implementatie van Helm-grafieken voor Kubernetes of met behulp van de Azure Portal-implementatiesjablonen. Frequentielimieten worden echter niet gesynchroniseerd met andere gatewayresources die zijn geconfigureerd in het API Management-exemplaar, inclusief de beheerde gateway in de cloud. Meer informatie

Opmerking

In het volgende voorbeeld wordt de frequentielimiet van 10 aanroepen per 60 seconden bepaald door het IP-adres van de beller. Na elke beleidsuitvoering worden de resterende aanroepen die zijn toegestaan in de periode, opgeslagen in de variabele 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>

Zie Geavanceerde aanvraagbeperking met Azure API Management voor meer informatie en voorbeelden van dit beleid.

Zie voor meer informatie over het werken met beleid: