Novas tentativas de entrega de mensagens do Amazon SNS - Amazon Simple Notification Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Novas tentativas de entrega de mensagens do Amazon SNS

O Amazon SNS define uma política de entrega para cada protocolo de entrega. A política de entrega define como o Amazon SNS tenta novamente a entrega de mensagens quando ocorrem erros do lado do servidor (quando o sistema que hospeda o endpoint inscrito se torna indisponível). Quando a política de entrega estiver esgotada, o Amazon SNS parará de tentar novamente a entrega e descartará a mensagem, a menos que uma fila de mensagens mortas esteja anexada à inscrição. Para obter mais informações, consulte Filas de mensagens não entregues do Amazon SNS.

Protocolos e políticas de entrega

nota
  • Com exceção do HTTP/S, não é possível alterar as políticas de entrega definidas pelo Amazon SNS. Somente HTTP/S oferece suporte a políticas personalizadas. Consulte Como criar uma política de entrega HTTP/S.

  • O Amazon SNS aplica instabilidade às novas tentativas de entrega. Para obter mais informações, consulte a publicação Recuo exponencial e instabilidade no Blog de arquitetura da AWS.

  • O tempo total de repetição da política para um endpoint HTTP/S não pode ser superior a 3,6 mil segundos. Esse limite é fixo e não pode ser alterado.

Tipo de endpoint Protocolos de entrega Fase de nova tentativa imediata (sem atraso) Fase de pré-recuo Fase de recuo Fase de pós-recuo Total de tentativas
AWSEndpoints gerenciados pela ¹ 3 vezes, sem atraso 2 vezes, 1 segundo de intervalo 10 vezes, com recuo exponencial, de 1 segundo a 20 segundos 100.000 vezes, 20 segundos de intervalo 100.015 vezes, ao longo de 23 dias
AWS Lambda
Amazon SQS
Endpoints gerenciados pelo cliente SMTP 0 vezes, sem atraso 2 vezes, 10 segundos de intervalo 10 vezes, com recuo exponencial, de 10 segundos a 600 segundos (10 minutos) 38 vezes, 600 segundos (10 minutos) de intervalo 50 tentativas, mais de 6 horas
SMS
Push para dispositivos móveis

¹ Para erros de controle de utilização com o protocolo do Firehose, o Amazon SNS usa a mesma política de entrega empregada em endpoints gerenciados pelo cliente.

Estágios da política de entrega

O diagrama a seguir mostra as fases de uma política de entrega.

Um diagrama do eixo x y exibindo o tempo como o valor x e a tentativa de entrega inicial como o valor y. A política de entrega começa com a fase de repetição imediata no eixo y, seguida no eixo x pela fase de pré-recuo, a fase de recuo e a fase pós-recuo.

Cada política de entrega é composta por quatro fases.

  1. Fase de nova tentativa imediata (sem atraso): essa fase ocorre imediatamente após a tentativa inicial de entrega. Não há um intervalo entre novas tentativas nessa fase.

  2. Fase de pré-recuo: segue a fase de nova tentativa imediata. Essa fase é usada pelo Amazon SNS para executar um conjunto de novas tentativas antes da aplicação de uma função de recuo. Essa fase especifica o número de novas tentativas e a quantidade de atraso entre elas.

  3. Fase de recuo: essa fase controla o atraso entre as novas tentativas usando a função de recuo de nova tentativa. Essa fase define um atraso mínimo, um atraso máximo e uma função de recuo de nova tentativa que define a rapidez com que o atraso aumenta do atraso mínimo para o máximo. A função de recuo pode ser aritmética, exponencial, geométrica ou linear.

  4. Fase de pós-recuo: essa fase ocorre após a fase de recuo. Ela especifica um número de novas tentativas e a quantidade de atraso entre elas. Esta é a fase final.

Como criar uma política de entrega HTTP/S

Você pode definir como o Amazon SNS tenta novamente a entrega de mensagens para endpoints HTTP/S usando uma política de entrega com quatro fases: sem atraso, pré-recuo, recuo e pós-recuo. Essa política permite que você substitua as configurações padrão de novas tentativas e as personalize de acordo com a capacidade do seu servidor HTTP.

É possível definir sua política de entrega HTTP/S como um objeto JSON no nível do tópico ou da assinatura:

  • Política em nível de tópico: aplica-se a todas as assinaturas HTTP/S vinculadas ao tópico. Use a ação de API CreateTopic ou SetTopicAttributes para definir essa política.

  • Política em nível de assinatura: aplica-se somente a uma assinatura específica. Use a ação de API Subscribe ou SetSubscriptionAttributes para definir essa política.

Como alternativa, você também pode usar o recurso AWS::SNS::Subscription nos modelos do CloudFormation.

Você deve personalizar sua política de entrega de acordo com a capacidade do seu servidor HTTP/S:

  • Servidor único para todas as assinaturas: se todas as assinaturas HTTP/S em um tópico usarem o mesmo servidor, defina a política de entrega como um atributo do tópico para garantir a consistência em todas as assinaturas.

  • Servidores diferentes para assinaturas: se as assinaturas tiverem como alvo servidores diferentes, crie uma política de entrega exclusiva para cada assinatura, de acordo com a capacidade do servidor específico.

Também é possível definir o cabeçalho Content-Type na política de solicitação para especificar o tipo de mídia da notificação. Por padrão, o Amazon SNS envia todas as notificações para endpoints HTTP/S com o tipo de conteúdo definido como text/plain; charset=UTF-8. No entanto, você pode substituir esse padrão usando o campo headerContentType na política de solicitação.

O objeto JSON a seguir define uma política de entrega com novas tentativas estruturadas em quatro fases:

  1. Fase sem atraso: tenta novamente três vezes imediatamente.

  2. Fase de pré-recuo: tenta novamente duas vezes com um intervalo de um segundo.

  3. Fase de recuo: tenta novamente 10 vezes com atrasos exponenciais que variam de 1 a 60 segundos.

  4. Fase pós-recuo: tenta novamente 35 vezes com um intervalo fixo de 60 segundos.

O Amazon SNS faz, ao todo, 50 tentativas de entrega antes de descartar a mensagem. Para reter mensagens que não podem ser entregues após todas as tentativas, configure sua assinatura para mover mensagens não entregues para uma fila de mensagens não entregues (DLQ). Para obter mais informações, consulte Filas de mensagens não entregues do Amazon SNS.

O Amazon SNS considera todos os erros 5XX e 429 (muitas solicitações enviadas) como passíveis de repetição. Esses erros estão sujeitos à política de entrega. Todos os outros erros são considerados falhas permanentes e não serão feitas novas tentativas.

nota

Essa política de entrega usa a propriedade maxReceivesPerSecond para controle do tráfego de entrega para uma média de 10 mensagens por segundo por assinatura. Embora esse mecanismo ajude a evitar que seu endpoint HTTP/S fique sobrecarregado pelo alto tráfego, ele foi projetado para manter uma taxa média de entrega e não impõe um limite rígido. Podem ocorrer picos ocasionais de tráfego de entrega acima do limite especificado, especialmente se sua taxa de publicação for consideravelmente maior do que o limite de controle de utilização.

Quando o tráfego de publicação (entrada) excede a taxa de entrega (saída), isso pode resultar em um acúmulo de mensagens e maior latência de entrega. Para evitar esses problemas, certifique-se de que o valor maxReceivesPerSecond esteja alinhado com os requisitos de capacidade e workload do seu servidor HTTP/S.

A política de entrega a seguir substitui o tipo de conteúdo padrão para notificação HTTP/S para application/json.

{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "requestPolicy": { "headerContentType": "application/json" } }

A política de entrega é composta por uma política de novas tentativas, uma política de controle de utilização e uma política de solicitação. No total, há nove atributos em uma política de entrega.

Política Descrição Restrição
minDelayTarget O atraso mínimo para uma nova tentativa.

Unidade: segundos

1 a atraso máximo

Padrão: 20

maxDelayTarget O atraso máximo para uma nova tentativa.

Unidade: segundos

Atraso mínimo a 3.600

Padrão: 20

numRetries O número total de novas tentativas, incluindo repetições imediatas, pré-recuo, recuo e pós-recuo. 0 a 100

Padrão: 3

numNoDelayRetries O número de novas tentativas a serem feitas imediatamente, sem atraso entre elas. 0 ou mais

Padrão: 0

numMinDelayRetries O número de tentativas na fase de pré-recuo, com o atraso mínimo especificado entre elas. 0 ou mais

Padrão: 0

numMaxDelayRetries O número de novas tentativas na fase pós-recuo, com o atraso máximo entre elas. 0 ou mais

Padrão: 0

backoffFunction O modelo para recuo entre novas tentativas.

Uma das quatro opções:

  • aritmética

  • exponencial

  • geométrica

  • linear

Padrão: linear

maxReceivesPerSecond O número máximo médio de entregas de mensagens por segundo, por assinatura. 1 ou mais

Padrão: sem controle de utilização (sem limite na taxa de entrega)

headerContentType

O tipo de conteúdo da notificação que está sendo enviada aos endpoints HTTP/S.

Se a política de solicitação não estiver definida, o tipo de conteúdo usará text/plain; charset=UTF-8 como padrão.

Quando a entrega de mensagens brutas é desativada para uma assinatura (padrão), ou quando a política de entrega é definida no nível do tópico, os tipos de conteúdo de cabeçalho compatíveis são application/json e text/plain.

Quando a entrega de mensagens brutas é ativada para uma assinatura, os seguintes tipos de conteúdo são compatíveis:

  • text/css

  • text/csv

  • text/html

  • text/plain

  • text/xml

  • application/atom+xml

  • application/json

  • application/octet-stream

  • application/soap+xml

  • application/x-www-form-urlencoded

  • application/xhtml+xml

  • application/xml

O Amazon SNS usa a seguinte fórmula para calcular o número de novas tentativas na fase de recuo:

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

É possível controlar a frequência de tentativas novas na fase de recuo usando três parâmetros:

  • minDelayTarget: define o atraso para a primeira nova tentativa na fase de recuo.

  • maxDelayTarget: define o atraso para a tentativa final na fase de recuo.

  • backoffFunction: determina o algoritmo que o Amazon SNS usa para calcular os atrasos entre a primeira e a última tentativa na fase de recuo. Você pode escolher entre quatro funções disponíveis de recuo de nova tentativa.

O diagrama a seguir ilustra como as diferentes funções de recuo de nova tentativa afetam os atrasos entre as novas tentativas durante a fase de recuo. A política de entrega usada neste exemplo inclui as seguintes configurações: total de 10 tentativas, atraso mínimo de 5 segundos e atraso máximo de 260 segundos.

  • O eixo vertical mostra o atraso (em segundos) para cada nova tentativa.

  • O eixo horizontal representa a sequência de novas tentativas, da primeira à décima.

O diagrama mostra como os atrasos de novas tentativas progridem em 10 tentativas com base em quatro funções de recuo: exponencial, aritmética, linear e geométrica. Cada linha colorida representa o padrão de atraso de uma função: Exponencial: aumenta rapidamente, atingindo o atraso máximo mais rápido; Linear: aumenta continuamente a cada nova tentativa; Aritmética e Geométrica: mostra aumentos moderados, mais acentuados que lineares, mas menos rápidos que exponenciais. Cada linha começa em torno do atraso mínimo de 5 segundos e se aproximam do atraso máximo de 260 segundos até a décima tentativa.