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, you can't change Amazon SNS-defined delivery policies. Only HTTP/S suporte a políticas personalizadas. Consulte Criação de uma política HTTP/S de entrega.

  • 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 HTTP/S endpoint não pode ser maior que 3.600 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
AWS endpoints gerenciados ¹ 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 demora) — 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 — Essa fase segue a fase de repetição 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 retry-backoff. 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 pós-recuo — Esta fase segue a fase de recuo. Ela especifica um número de novas tentativas e a quantidade de atraso entre elas. Esta é a fase final.

Criação de uma política HTTP/S de entrega

Você pode definir como o Amazon SNS tenta novamente a entrega de mensagens para HTTP/S endpoints 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 repetição e as personalize de acordo com a capacidade do seu servidor HTTP.

Você pode definir sua política HTTP/S de entrega 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 HTTP/S assinaturas vinculadas ao tópico. Use a ação CreateTopicou SetTopicAttributesAPI para definir essa política.

  • Política em nível de assinatura — aplica-se somente a uma assinatura específica. Use a ação Subscribeou SetSubscriptionAttributesAPI para definir essa política.

Como alternativa, você também pode usar o AWS::SNS::Subscriptionrecurso em seus AWS CloudFormation modelos.

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

  • Servidor único para todas as assinaturas — Se todas as HTTP/S assinaturas 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, adaptada à capacidade do servidor específico.

Você também pode definir o Content-Type cabeçalho 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 HTTP/S endpoints com o tipo de conteúdo definido como. text/plain; charset=UTF-8 No entanto, você pode substituir esse padrão usando o headerContentTypecampo 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 demora — tente novamente 3 vezes imediatamente.

  2. Fase de pré-recuo — tente novamente 2 vezes com um intervalo de 1 segundo.

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

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

O Amazon SNS faz um total de 50 tentativas para entregar uma mensagem antes de descartá-la. Para reter as mensagens que não podem ser entregues após todas as novas tentativas, configure sua assinatura para mover as mensagens não entregues para uma fila de mensagens mortas (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 maxReceivesPerSecond propriedade para reduzir o tráfego de entrega para uma média de 10 mensagens por segundo por assinatura. Embora esse mecanismo ajude a evitar que seu HTTP/S endpoint 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 significativamente maior do que o limite de limitaçã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, garanta que o maxReceivesPerSecond valor esteja alinhado com os requisitos de capacidade e carga de trabalho do seu HTTP/S servidor.

O exemplo de política de entrega a seguir substitui o tipo de conteúdo padrão para notificação HTTP/S. 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 repetição, uma política de aceleração e uma política de solicitação. No total, há 9 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édio máximo de entregas de mensagens por segundo, por assinatura. 1 ou mais

Padrão: Sem limitaçã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

  • aplicação/ 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

Você pode controlar a frequência de novas tentativas durante a fase de recuo usando três parâmetros:

  • minDelayTarget— Define o atraso para a primeira tentativa de repetição na fase de recuo.

  • maxDelayTarget— Define o atraso para a tentativa final de nova tentativa na fase de recuo.

  • backoffFunction— Determina o algoritmo que o Amazon SNS usa para calcular os atrasos de todas as tentativas de repetição entre a primeira e a última tentativa. Você pode escolher entre quatro funções de retry-backoff disponíveis.

O diagrama a seguir ilustra como as diferentes funções de recuo de repetição 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, um atraso mínimo de 5 segundos e um atraso máximo de 260 segundos.

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

  • O eixo horizontal representa a sequência de repetição, variando da primeira à décima tentativa.

O diagrama mostra como os atrasos de repetição 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 constantemente a cada nova tentativa, Aritmética e Geométrica: Mostra aumentos moderados, mais acentuados que lineares, mas menos rápidos que exponenciais. Todas as linhas começam perto do atraso mínimo de 5 segundos e se aproximam do atraso máximo de 260 segundos na décima tentativa.