Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Reintento de entrega de mensajes de Amazon SNS
Amazon SNS define una política de entrega para cada protocolo de entrega. En la política de entrega, se define cómo Amazon SNS reintenta la entrega de mensajes cuando se producen errores en el servidor (cuando el sistema que aloja el punto de enlace suscrito deja de estar disponible). Cuando se agota la política de entrega, Amazon SNS deja de intentar la entrega y descarta el mensaje, a menos que se adjunte una cola de mensajes fallidos a la suscripción. Para obtener más información, consulte Colas de mensajes fallidos de Amazon SNS.
Protocolos y políticas de entrega
nota
-
A excepción de HTTP/S, no puede cambiar las políticas de entrega definidas mediante Amazon SNS. Solo HTTP/S admite políticas personalizadas. Consulte Creación de una política de entrega HTTP/S.
-
Amazon SNS aplica la fluctuación de retardo a los reintentos de entrega. Para obtener más información, consulte la publicación Retroceso exponencial y fluctuación de retardo
del blog de arquitectura de AWS. -
El tiempo total de reintentos de la política para un punto de conexión HTTP/S no puede ser superior a 3600 segundos. Se trata de un límite codificado y no se puede aumentar.
| Tipo de punto de conexión | Protocolos de entrega | Fase de reintento inmediato (sin retraso) | Fase previa a la regresión | Fase de regresión | Fase posterior a la regresión | Total de intentos |
|---|---|---|---|---|---|---|
| AWSPuntos de enlace administrados por | ¹ | 3 veces, sin retraso | 2 veces, 1 segundo de diferencia | 10 veces, con retardo exponencial, de 1 segundo a 20 segundos | 100 000 veces, con 20 segundos de diferencia | 100 015 veces, durante 23 días |
| AWS Lambda | ||||||
| Amazon SQS | ||||||
| Puntos de enlace administrados por el cliente | SMTP | 0 veces, sin demora | 2 veces, 10 segundos de diferencia | 10 veces, con retardo exponencial, de 10 segundos a 600 segundos (10 minutos) | 38 veces, 600 segundos (10 minutos) de diferencia | 50 intentos, durante 6 horas |
| SMS | ||||||
| Inserción en móvil |
¹ Para los errores de limitación controlada con el protocolo de Firehose, Amazon SNS utiliza la misma política de entrega que para los puntos de conexión administrados por el cliente.
Fases de la política de entrega
En el siguiente diagrama, se muestran las fases de una política de entrega.
Cada política de entrega se compone de cuatro fases.
-
Fase de reintento inmediato (sin retraso): esta fase se produce inmediatamente después del intento inicial de entrega. No hay un plazo de tiempo entre los reintentos de esta fase.
-
Fase previa al retroceso: esta fase sigue a la fase de reintento inmediato. Amazon SNS utiliza esta fase para intentar realizar un conjunto de reintentos antes de aplicar una función de respaldo. En esta fase se especifica el número de reintentos y el tiempo de retraso entre ellos.
-
Fase de retroceso: en esta fase, se controla el retraso entre reintentos mediante la función de retry-backoff. En esta fase, se establece el retraso mínimo, el retraso máximo y la función retry-backoff, que define con qué rapidez van a ir aumentando los retrasos desde el valor mínimo hasta alcanzar el retraso máximo. La función de retardo puede ser aritmética, exponencial, geométrica o lineal.
-
Fase posterior al retroceso: esta fase sigue a la fase de retroceso. Especifica un número de reintentos y el tiempo de retraso entre ellos. Esta es la fase final.
Creación de una política de entrega HTTP/S
Puede definir la forma en que Amazon SNS reintenta la entrega de mensajes a los puntos de conexión HTTP/S mediante una política de entrega con cuatro fases: sin retraso, previa al retroceso, retroceso y posterior al retroceso. Esta política le permite anular la configuración de reintentos predeterminada y personalizarla para que se adapte a la capacidad de su servidor HTTP.
Puede configurar su política de entrega HTTP/S como un objeto JSON en el nivel del tema o de la suscripción:
-
Política en el nivel del tema: se aplica a todas las suscripciones a HTTP/S vinculadas al tema. Use la acción
CreateTopicoSetTopicAttributesde la API para configurar esta política. -
Política en el nivel de suscripción: se aplica solo a una suscripción específica. Use la acción
SubscribeoSetSubscriptionAttributesde la API para configurar esta política.
Como alternativa, también puede utilizar el recurso AWS::SNS::Subscription en sus plantillas de CloudFormation.
Debe personalizar la política de entrega en función de la capacidad de su servidor HTTP/S:
-
Servidor único para todas las suscripciones: si todas las suscripciones a HTTP/S en un tema utilizan el mismo servidor, configure la política de entrega como un atributo del tema para garantizar la coherencia en todas las suscripciones.
-
Diferentes servidores para las suscripciones: si las suscripciones se dirigen a servidores diferentes, cree una política de entrega única para cada suscripción, adaptada a la capacidad del servidor específico.
También puede establecer el encabezado Content-Type en la política de solicitudes para especificar el tipo de medio de la notificación. De forma predeterminada, Amazon SNS envía todas las notificaciones a puntos de conexión HTTP/S con el tipo de contenido establecido en text/plain; charset=UTF-8. Sin embargo, puede anular este valor predeterminado mediante el campo headerContentType en la política de solicitudes.
El siguiente objeto JSON define una política de entrega con reintentos estructurados en cuatro fases:
-
Fase sin retraso: se vuelve a intentar 3 veces inmediatamente.
-
Fase previa al retroceso: se vuelve a intentar 2 veces con un intervalo de 1 segundo.
-
Fase de retroceso: se vuelve a intentar 10 veces con retrasos exponenciales que oscilan entre 1 y 60 segundos.
-
Fase previa al retroceso: se vuelve a intentar 35 veces con un intervalo fijo de 60 segundos.
Amazon SNS realiza un total de 50 intentos para entregar un mensaje antes de descartarlo. Para conservar los mensajes que no se pueden entregar después de todos los reintentos, configure su suscripción con el fin de trasladar los mensajes que no se pueden entregar a una cola de mensajes fallidos (DLQ). Para obtener más información, consulte Colas de mensajes fallidos de Amazon SNS.
Amazon SNS considera que se pueden reintentar todos los errores 5XX y 429 (se han enviado demasiadas solicitudes). Estos errores están sujetos a la política de entrega. Todos los demás errores se consideran errores permanentes y no volverán a intentarse.
nota
Esta política de entrega utiliza la propiedad maxReceivesPerSecond para limitar el tráfico de entrega a una media de 10 mensajes por segundo por suscripción. Si bien este mecanismo ayuda a evitar que su punto de conexión HTTP/S se sobrecargue por el alto tráfico, está diseñado para mantener una tasa de entrega media y no impone un límite estricto. De vez en cuando, se pueden producir picos de tráfico de entrega por encima del límite especificado, especialmente si la tasa de publicación es significativamente superior a la limitación.
Cuando el tráfico de publicación (entrante) supera la velocidad de entrega (saliente), puede provocar una acumulación de mensajes pendientes y una mayor latencia de entrega. Para evitar estos problemas, asegúrese de que el valor maxReceivesPerSecond se ajuste a los requisitos de capacidad y carga de trabajo de su servidor HTTP/S.
El siguiente ejemplo de política de entrega anula el tipo de contenido predeterminado para la notificación HTTP/S a application/json.
{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "requestPolicy": { "headerContentType": "application/json" } }
La política de entrega se compone de una política de reintentos, una política de limitación y una política de solicitudes. En total, hay nueve atributos en una política de entrega.
| Política | Descripción | Restricción |
|---|---|---|
minDelayTarget |
Retraso mínimo de un reintento. Unidad: segundos |
Entre 1 y el retraso máximo Predeterminado: 20 |
maxDelayTarget |
Retraso máximo de un reintento. Unidad: segundos |
Entre el retraso mínimo y 3600 Predeterminado: 20 |
numRetries |
Número total de reintentos, incluidos los reintentos inmediatos, los reintentos previos al retardo y los reintentos posteriores al retardo. | Entre 0 y 100 Predeterminado: 3 |
numNoDelayRetries |
Número de reintentos que se van a realizar inmediatamente, sin retraso entre ellos. | 0 o más Predeterminado: 0 |
numMinDelayRetries |
Número de reintentos en la fase previa al retardo, con el retraso mínimo especificado entre ellos. | 0 o más Predeterminado: 0 |
numMaxDelayRetries |
Número de reintentos en la fase posterior al retardo, con el retraso máximo entre ellos. | 0 o más Predeterminado: 0 |
backoffFunction |
Modelo de retardo entre reintentos. |
Una de las cuatro opciones:
Valor predeterminado: lineal |
maxReceivesPerSecond
|
El número máximo medio de entregas de mensajes por segundo y suscripción. | 1 o más Predeterminado: sin limitaciones (sin límite en la tasa de entrega) |
headerContentType
|
El tipo de contenido de la notificación que se envía a los puntos de conexión HTTP/S. |
Si no está definida la política de solicitudes, el tipo de contenido será Cuando la entrega de mensajes sin procesar está desactivada para una suscripción (valor predeterminado), o cuando la política de entrega está definida en el nivel de tema, los tipos de contenido de encabezado admitidos son Cuando se activa la entrega de mensajes sin procesar para una suscripción, se admiten los siguientes tipos de contenido:
|
Amazon SNS utiliza la siguiente fórmula para calcular la cantidad de reintentos en la fase de retardo:
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
Puede controlar la frecuencia de los reintentos en la fase de retroceso utilizando tres parámetros:
-
minDelayTarget: ajusta el retraso del primer reintento en la fase de retroceso. -
maxDelayTarget: ajusta el retraso del último reintento en la fase de retroceso. -
backoffFunction: determina el algoritmo que Amazon SNS utiliza para calcular los retrasos de todos los reintentos entre el primer y el último reintento. Puede elegir entre cuatro funciones de retroceso de reintentos.
El siguiente diagrama ilustra cómo afectan las diferentes funciones de retroceso de reintentos a los retrasos entre los reintentos durante la fase de retroceso. La política de entrega que se utiliza en este ejemplo incluye la siguiente configuración: 10 reintentos en total, un retraso mínimo de 5 segundos y un retraso máximo de 260 segundos.
-
El eje vertical muestra el retraso (en segundos) de cada reintento.
-
El eje horizontal representa el número de reintentos, desde el primero hasta el décimo.