Início Rápido: Definir limites de taxa de solicitação

Observação

Azure Spring Apps é o novo nome do serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns locais por um tempo enquanto trabalhamos para atualizar ativos como capturas de tela, vídeos e diagramas.

Este artigo se aplica a(o):❌ Básico/Standard ✔️ Enterprise

Este início rápido mostra como definir limites de taxa de solicitação usando o Gateway do Spring Cloud no plano Enterprise do Aplicativos Spring do Azure.

A limitação de taxa permite evitar problemas que surgem com picos no tráfego. Quando você define limites de taxa de solicitação, seu aplicativo pode rejeitar solicitações excessivas. Essa configuração ajuda você a minimizar erros de limitação e prever com mais precisão a taxa de transferência.

Pré-requisitos

Definir limites de taxa de solicitação

O Spring Cloud Gateway inclui filtros de rota da versão de Código aberto e vários outros filtros de rota. Um desses filtros é o filtro RateLimit: limitar solicitações do usuário. O filtro RateLimit limita o número de solicitações permitidas por rota durante uma janela de tempo.

Ao definir uma rota, você pode adicionar o filtro RateLimit incluindo-o na lista de filtros para a rota. O filtro aceita quatro opções:

  • O número de solicitações aceitas durante a janela.
  • A duração da janela. Esse valor está em milissegundos por padrão, mas você pode especificar um sufixo de s, m ou h para indicar que o valor está em segundos, minutos ou horas.
  • (Opcional) Uma chave de partição do usuário. Você também pode aplicar a limitação de taxa por usuário. Ou seja, usuários diferentes podem ter sua própria taxa de transferência permitida com base em um identificador encontrado na solicitação. Indique se a chave está em uma declaração JWT ou cabeçalho HTTP com sintaxe claim ou header.
  • (Opcional) Você pode classificar o limite por endereços IP, mas não em combinação com a limitação de taxa por usuário.

O exemplo a seguir limitaria todos os usuários a duas solicitações a cada cinco segundos à rota /products:

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

Se você quiser expor uma rota para diferentes conjuntos de usuários, cada um identificado pelo próprio cabeçalho HTTP client_id, use a seguinte definição de rota:

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

Quando o limite for excedido, as respostas falharão com o status 429 Too Many Requests.

Use o seguinte comando para aplicar o filtro RateLimit à rota /products:

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

Use os seguintes comandos para recuperar a URL da rota /products no 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"

Faça várias solicitações para a URL em /products um período de cinco segundos para ver as solicitações falharem com um status 429 Too Many Requests.

Limpar os recursos

Se planejar continuar trabalhando com os tutoriais e inícios rápidos subsequentes, deixe esses recursos onde estão. Quando não for mais necessário, exclua o grupo de recursos, que excluirá os recursos no grupo de recursos. Para excluir o grupo de recursos usando a CLI do Azure, use os seguintes comandos:

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

Próximas etapas

Continue com qualquer um dos seguintes guias de início rápido opcionais: