Nouvelle tentative de distribution des messages Amazon SNS - Amazon Simple Notification Service

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.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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 :

  1. 3  fois immédiatement dans la phase sans délai

  2. 2 fois (1 seconde d'intervalle) dans la phase de pré-interruption

  3. 10 fois (avec interruption exponentielle de 1 à 60 secondes)

  4. 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.

Politique Description Contrainte
minDelayTarget Délai minimal pour une nouvelle tentative.

Unité : secondes

1 jusqu'au délai maximal

Par défaut : 20

maxDelayTarget Délai maximal pour une nouvelle tentative.

Unité : secondes

Délai minimal jusqu'à 3 600

Par défaut : 20

numRetries Le nombre total de nouvelles tentatives, y compris les tentatives immédiates, antérieures à l’interruption, pendant l’interruption et postérieures à l’interruption. 0 à 100

Par défaut : 3

numNoDelayRetries Le nombre de nouvelles tentatives à effectuer immédiatement, sans délai entre elles. 0 ou plus

Par défaut : 0

numMinDelayRetries Nombre de nouvelles tentatives dans la phase antérieure à l’interruption, avec le délai minimum entre elles spécifié. 0 ou plus

Par défaut : 0

numMaxDelayRetries Le nombre de nouvelles tentatives dans la phase postérieure à l’interruption, avec le délai maximum entre elles. 0 ou plus

Par défaut : 0

backoffFunction Modèle d’interruption entre les nouvelles tentatives.

L'une des quatre options suivantes :

  • arithmétique

  • exponentielle

  • géométrique

  • linéaire

Par défaut : linéaire

maxReceivesPerSecond Nombre maximal de distributions par seconde, par abonnement. 1 ou plus

Par défaut : pas de limitation

headerContentType

Type de contenu de la notification envoyée aux points de terminaison HTTP/S.

Si la politique de demande n'est pas définie, le type de contenu par défaut est text/plain; charset=UTF-8.

Quand la remise des messages bruts est désactivée pour un abonnement (par défaut) ou quand la politique de remise est définie au niveau de la rubrique, les types de contenu d'en-tête pris en charge sont application/json et text/plain.

Quand la remise des messages bruts est activée pour un abonnement, les types de contenu suivants sont pris en charge :

  • 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

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.