Nouvelle tentative de distribution des messages Amazon SNS
Amazon SNS définit une politique de distribution pour chaque protocole de distribution. La politique de distribution définit comment Amazon SNS tente à nouveau de livrer des messages lorsque des erreurs côté serveur se produisent (lorsque le système qui héberge le point de terminaison abonné devient indisponible). Lorsque la politique de distribution expire, Amazon SNS cesse de retenter la distribution et rejette le message, sauf si une file d'attente de lettres mortes est jointe à l'abonnement. Pour de plus amples informations, veuillez consulter Files d'attente de lettres mortes (DLQ)) d'Amazon SNS.
Rubriques
Protocoles et politiques de distribution
Note
-
À l'exception de HTTP/S, vous ne pouvez pas modifier les politiques de distribution définies par Amazon SNS. Seul HTTP/S prend en charge les politiques personnalisées. Consultez Création d'une politique de distribution HTTP/S.
-
Amazon SNS applique l'instabilité aux nouvelles tentatives de distribution. Pour plus d'informations, consultez la publication Exponential Backoff and Jitter
sur le blog AWS Architecture. -
L’intervalle total entre les nouvelles tentatives pour un point de terminaison HTTP/S ne peut pas dépasser 3 600 secondes. Il s'agit d'une limite fixe qui ne peut pas être augmentée.
Type de point de terminaison | Protocoles de distribution | Phase nouvelle tentative immédiate (sans délai) | Phase de pré-interruption | Phase d'interruption | Phase de post-interruption | Nombre total de tentatives |
---|---|---|---|---|---|---|
Points de terminaison gérés par AWS | Amazon Kinesis Data Firehose¹ | 3 fois, sans délai | 2 fois, 1 seconde d'intervalle | 10 fois, avec retour exponentiel, de 1 seconde à 20 secondes | 100 000 fois, 20 secondes d'intervalle | 100 015 fois, plus de 23 jours |
AWS Lambda | ||||||
Amazon SQS | ||||||
Points de terminaison gérés par le client | SMTP | 0 fois, sans délai | 2 fois, 10 secondes d'intervalle | 10 fois, avec retour exponentiel, de 10 secondes à 600 secondes (10 minutes) | 38 fois, 600 secondes (10 minutes) d'intervalle | 50 tentatives, plus de 6 heures |
SMS | ||||||
Push mobile |
¹ Pour les erreurs de limitation avec le protocole Kinesis Data Firehose, Amazon SNS utilise la même politique de distribution que pour les points de terminaison gérés par le client.
Étapes de la politique de distribution
Le diagramme suivant montre les phases d'une politique de distribution.

Chaque politique de distribution comprend quatre phases.
-
Phase de nouvelle tentative immédiate (sans délai) – Cette phase se produit immédiatement après la tentative de distribution initiale. Il n'y a aucun délai entre les relances dans cette phase.
-
Phase de pré-interruption – Cette phase suit la phase de nouvelle tentative immédiate. Amazon SNS utilise cette phase pour tenter une série de nouvelles tentatives avant d'appliquer une fonction d'interruption. Cette phase spécifie le nombre de nouvelles tentatives et le délai entre elles.
-
Phase d'interruption – Cette phase contrôle le délai entre les nouvelles tentatives à l'aide de la fonction retry-backoff. Cette phase définit un délai minimum, un délai maximum et une fonction d’interruption des nouvelles tentatives qui définit la vitesse à laquelle le délai augmente depuis le délai minimum au délai maximum. La fonction d’interruption peut être arithmétique, exponentielle, géométrique ou linéaire.
-
Phase de post-interruption – Cette phase suit la phase d'interruption. Il spécifie un certain nombre de nouvelles tentatives et la longueur du délai entre elles. Il s’agit de la phase finale.
Création d'une politique de distribution HTTP/S
Vous pouvez utiliser une politique de distribution et ses quatre phases pour définir comment Amazon SNS effectue une nouvelle distribution des messages aux points de terminaison HTTP/S. Amazon SNS vous permet de remplacer la politique de nouvelle tentative par défaut pour les points de terminaison HTTP lorsque vous souhaitez, par exemple, la personnaliser en fonction de la capacité de votre serveur HTTP.
Vous pouvez définir votre politique de distribution HTTP/S en tant qu'objet JSON au niveau de l'abonnement ou de la rubrique. Lorsque vous définissez la politique au niveau de la rubrique, elle s'applique à tous les abonnements HTTP/S associés à la rubrique. Pour définir la politique de remise au niveau de l'abonnement, vous pouvez utiliser l'action d'API Subscribe
ou SetSubscriptionAttributes
. Pour définir la politique de remise au niveau de la rubrique, vous pouvez utiliser l'action d'API CreateTopic
ou SetTopicAttributes
. Sinon, vous pouvez également utiliser la ressource AWS::SNS::Subscription dans vos modèles AWS CloudFormation.
Vous devez personnaliser votre politique de distribution en fonction de la capacité de votre serveur HTTP/S. Vous pouvez définir la politique en tant qu'attribut d’une rubrique ou d'un abonnement. Si tous les abonnements HTTP/S de votre rubrique ciblent le même serveur HTTP/S, nous vous recommandons de définir la politique de remise en tant qu'attribut de rubrique, afin qu'elle reste valable pour tous les abonnements HTTP/S de la rubrique. Sinon, vous devez composer une politique de distribution pour chaque abonnement HTTP/S de votre rubrique, en fonction de la capacité du serveur HTTP/S ciblé par la politique.
Vous pouvez également définir l'en-tête Content-Type dans la politique de demande pour spécifier le type de support de la notification. Par défaut, Amazon SNS envoie toutes les notifications aux points de terminaison HTTP/S dont le type de contenu est défini sur text/plain; charset=UTF-8
. Amazon SNS vous permet de remplacer la politique de demande par défaut. Consultez le tableau ci-dessous pour découvrir les contraintes et les types headerContentType pris en charge.
L'objet JSON suivant représente une politique de distribution qui indique à Amazon SNS de faire une nouvelle tentative pour une distribution HTTP/S échouée, comme suit :
-
3 fois immédiatement dans la phase sans délai
-
2 fois (1 seconde d'intervalle) dans la phase de pré-interruption
-
10 fois (avec interruption exponentielle de 1 à 60 secondes)
-
35 fois (60 secondes d'intervalle) dans la phase de post-interruption
Dans cet exemple de politique de distribution, Amazon SNS effectue un total de 50 tentatives avant de rejeter le message. Pour conserver le message après l'épuisement des nouvelles tentatives spécifiées dans la politique de distribution, configurez votre abonnement pour déplacer les messages non délivrables vers une file d'attente de lettres mortes (DLQ). Pour de plus amples informations, veuillez consulter Files d'attente de lettres mortes (DLQ)) d'Amazon SNS.
Note
En utilisant la propriété maxReceivesPerSecond
, cette politique de distribution indique également à Amazon SNS de limiter les distributions à un maximum de 10 par seconde. Ce taux d'auto-limitation pourrait faire que le nombre de messages publiés (trafic entrant) est supérieure au nombre de messages délivrés (trafic sortant). Lorsqu'il y a plus de trafic entrant que sortant, votre abonnement peut accumuler un important arriéré de messages, ce qui peut entraîner une latence élevée de remise des messages. Dans vos politiques de distribution, veillez à spécifier une valeur pour maxReceivesPerSecond
qui n'a pas d'impact négatif sur votre application.
Note
Cette politique de remise remplace le type de contenu par défaut pour les notifications 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" } }
La politique de remise se compose d'une politique de nouvelle tentative, d'une politique de limitation et d'une politique de demande. Au total, une politique de remise comprend 9 attributs.
Amazon SNS utilise la formule suivante pour calculer le nombre de nouvelles tentatives dans la phase d'interruption :
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
Vous pouvez utiliser trois paramètres pour contrôler la fréquence des nouvelles tentatives dans la phase d’interruption.
-
minDelayTarget
– Définit le délai associé à la première nouvelle tentative dans la phase d'interruption. -
maxDelayTarget
– Définit le délai associé à la nouvelle tentative finale dans la phase d'interruption. -
backoffFunction
– Définit l'algorithme utilisé par Amazon SNS pour calculer les délais associés à toutes les nouvelles tentatives entre la première et la dernière tentative dans la phase d'interruption. Vous pouvez utiliser l'une des quatre fonctions d’interruption de nouvelle tentative.
Le diagramme suivant montre comment chaque fonction d’interruption de nouvelle tentative affecte le délai associé aux nouvelles tentatives pendant la phase d’interruption : politique de distribution avec le nombre total de nouvelles tentatives défini sur 10, le délai minimum défini sur 5 secondes et le délai maximum défini sur 260 secondes. L'axe vertical représente le délai, en secondes, associé à chacune des 10 relances. L'axe horizontal représente le nombre de nouvelles tentatives, de la première à la dixième.
