Dela via


Snabbstart: Ange hastighetsbegränsningar för begäranden

Kommentar

Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.

Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.

Den här artikeln gäller för: ❎ Basic/Standard ✅ Enterprise

Den här snabbstarten visar hur du anger hastighetsgränser för begäranden med hjälp av Spring Cloud Gateway i Azure Spring Apps Enterprise-planen.

Med hastighetsbegränsning kan du undvika problem som uppstår med trafiktoppar. När du anger hastighetsbegränsningar för begäranden kan programmet avvisa orimliga begäranden. Den här konfigurationen hjälper dig att minimera begränsningsfel och mer exakt förutsäga dataflödet.

Förutsättningar

Ange hastighetsgränser för begäranden

Spring Cloud Gateway innehåller routningsfilter från open source-versionen och flera routningsfilter. Ett av dessa filter är filtret RateLimit: Limiting user requests (Begränsa användarbegäranden). RateLimit-filtret begränsar antalet begäranden som tillåts per väg under en tidsperiod.

När du definierar en väg kan du lägga till RateLimit-filtret genom att inkludera det i listan med filter för vägen. Filtret accepterar fyra alternativ:

  • Antalet begäranden som godkänts under fönstret.
  • Varaktigheten för fönstret. Det här värdet är i millisekunder som standard, men du kan ange ett suffix med s, m eller h som anger att värdet är i sekunder, minuter eller timmar.
  • (Valfritt) En användarpartitionsnyckel. Du kan också tillämpa hastighetsbegränsning per användare. Olika användare kan alltså få sitt eget dataflöde tillåtet baserat på en identifierare som finns i begäran. Ange om nyckeln finns i ett JWT-anspråk eller HTTP-huvud med claim eller header syntax.
  • (Valfritt) Du kan betygsätta gränsen efter IP-adresser, men inte i kombination med hastighetsbegränsning per användare.

I följande exempel begränsas alla användare till två begäranden var femte sekund till /products vägen:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

Om du vill exponera en väg för olika uppsättningar användare, som var och en identifieras av sitt eget client_id HTTP-huvud, använder du följande routningsdefinition:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

När gränsen överskrids misslyckas svar med 429 Too Many Requests status.

Använd följande kommando för att tillämpa filtret på RateLimit /products vägen:

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

Använd följande kommandon för att hämta URL:en för /products vägen i Spring Cloud Gateway:

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

Gör flera begäranden till URL:en inom en fem sekundersperiod för /products att se begäranden misslyckas med statusen 429 Too Many Requests.

Rensa resurser

Om du planerar att fortsätta arbeta med efterföljande snabbstarter och självstudier kanske du vill lämna dessa resurser på plats. Ta bort resursgruppen när den inte längre behövs, vilket tar bort resurserna i resursgruppen. Om du vill ta bort resursgruppen med hjälp av Azure CLI använder du följande kommandon:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Nästa steg

Fortsätt till någon av följande valfria snabbstarter: