Ir para o conteúdo

Como soluciono os erros de "ThrottlingException Rate exceeded" no Amazon SNS?

3 minuto de leitura
0

Quero solucionar o erro "ThrottlingException Rate exceeded" no Amazon Simple Notification Service (Amazon SNS).

Breve descrição

Se as solicitações de API do Amazon SNS excederem a cota de controle de utilização da API, o Amazon SNS retorna uma mensagem de erro "ThrottlingException Rate exceeded" semelhante à seguinte:

"An error occurred (ThrottlingException) when calling the API operation: Rate exceeded"

Observação: o Amazon SNS controla as chamadas de API para melhorar o desempenho do serviço. Para obter mais informações sobre as cotas de controle de utilização da API do Amazon SNS, consulte Endpoints e cotas do Amazon Simple Notification Service.

Resolução

Identifique a API com controle de utilização

Quando o limite de taxa excede o limite alocado para uma chamada de API, você recebe uma resposta de erro. Verifique a mensagem de erro ou a pilha de erros para identificar a ação da API que está recebendo controle de utilização.

Use logs do AWS CloudTrail para verificar o evento da chamada de API. Os eventos compatíveis são registrados em um evento do CloudTrail, junto com outros eventos de serviços da AWS, como parte do histórico de eventos. Para obter mais informações, consulte Logging AWS SNS API calls using AWS CloudTrail (Registrando em log chamadas de API do AWS SNS usando o AWS CloudTrail).

Também é possível ver as métricas do Amazon CloudWatch no Amazon SNS. Use as métricas de uso do Amazon SNS para identificar chamadas de API do SNS que atingiram o limite de taxa.

Verifique sua cota de controle de utilização de API do Amazon SNS

A cota de controle de utilização da API do Amazon SNS varia de acordo com a região da AWS. A cota de mensagens por segundo se baseia no número de mensagens publicadas em uma região do SNS combinada com solicitações de APIs Publish e PublishBatch. Se você exceder a cota de mensagens por segundo da sua região, pode receber erros de controle de utilização. Para obter mais informações, consulte Controle de utilização da API do Amazon SNS.

Observação: depois que os logs do CloudTrail são ativados, as solicitações de API Publish e PublishBatch do SNS são registradas no CloudTrail. No entanto, o tipo de recurso do SNS AWS::SNS::PhoneNumber não é registrado em log pelo CloudTrail.

Use recuo exponencial e novas tentativas

Para evitar erros de controle de utilização, é uma prática recomendada usar o recuo exponencial e as novas tentativas ao fazer uma chamada de API para escalonar os intervalos. Certifique-se de distribuir suas chamadas de API ao longo do tempo. Agende ações com randomização para que elas se espalhem ao longo do tempo. Para obter mais informações, consulte Exponential backoff and jitter (Recuo exponencial e jitter) e Comportamento de repetição.

Use o seguinte exemplo de pseudocódigo de alto nível para recuo exponencial e novas tentativas:

MakeSDKRequest() {  attempts = 0
  loop {
    GetSendToken()
    response = SNSAPIRequest()
    RequestBookkeeping(response)
    if not Retryable(response)
      return response
    attempts += 1
    if attempts >= MAX_ATTEMPTS:
      return response
    if not HasRetryQuota(response)
      return response
    delay = ExponentialBackoff(attempts)
    sleep(delay)
  }
}

Solicite um aumento de cota

Se você implementou o recuo exponencial e novas tentativas, mas continua recebendo erros "ThrottlingException Rate exceeded", envie uma solicitação de aumento de cota do SNS.

Observação: é possível solicitar um aumento de limite flexível, mas não é possível aumentar o limite rígido de cota. Para obter mais informações, consulte Service Quotas.

AWS OFICIALAtualizada há 6 meses