Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Tentativi di consegna dei messaggi di Amazon SNS
Amazon SNS definisce una policy di consegna per ogni protocollo di consegna. La policy di consegna definisce il modo in cui Amazon SNS esegue nuovi tentativi di consegna dei messaggi quando si verificano errori sul lato server (quando il sistema che ospita l'endpoint sottoscritto diventa non disponibile). Quando la politica di spedizione è esaurita, Amazon SNS smette di tentare nuovamente la consegna e scarterà il messaggio, a meno che all'abbonamento non sia allegata una coda di lettere non recapitate. Per ulteriori informazioni, consulta Code per le lettere morte di Amazon SNS.
Protocolli e policy di consegna
Nota
-
Ad eccezione di HTTP/S, non puoi modificare le politiche di consegna di Amazon SNS-defined . HTTP/S Supporta solo politiche personalizzate. Consulta Creazione di una politica HTTP/S di consegna.
-
Amazon SNS applica il jittering ai tentativi di consegna. Per ulteriori informazioni, vedere il post Backoff esponenziale e Jitter
in Blog architettura AWS . -
Il tempo totale di riprova della policy per un HTTP/S endpoint non può essere superiore a 3.600 secondi. Questo è un limite fissato che non può essere modificato.
| Tipo di endpoint | Protocolli di consegna | Fase dei nuovi tentativi immediati (nessun ritardo) | Pre-backoff fase | Fase di backoff | Post-backoff fase | Totale tentativi |
|---|---|---|---|---|---|---|
| AWS endpoint gestiti | ¹ | 3 volte, senza ritardo | 2 volte, 1 secondo di distanza | 10 volte, con backoff esponenziale, da 1 secondo a 20 secondi | 100.000 volte, 20 secondi di distanza | 100.015 volte, oltre 23 giorni |
| AWS Lambda | ||||||
| Amazon SQS | ||||||
| Endpoint gestiti dal cliente | SMTP | 0 volte, senza ritardo | 2 volte, 10 secondi di distanza | 10 volte, con backoff esponenziale, da 10 secondi a 600 secondi (10 minuti) | 38 volte, 600 secondi (10 minuti) di distanza | 50 tentativi, oltre 6 ore |
| SMS | ||||||
| Push per dispositivi mobili |
¹ Per limitare gli errori con il protocollo Firehose, Amazon SNS utilizza la stessa politica di consegna utilizzata per gli endpoint gestiti dai clienti.
Fasi della policy di consegna
Il diagramma seguente mostra le fasi di una policy di consegna.
Ogni policy di consegna si compone di quattro fasi.
-
Fase di riprova immediata (nessun ritardo): questa fase si verifica immediatamente dopo il tentativo di consegna iniziale. Non c'è ritardo tra i nuovi tentativi in questa fase.
-
Pre-backoff fase: questa fase segue la fase di riprova immediata. Amazon SNS utilizza questa fase per effettuare una serie di tentativi prima di applicare una funzione di backoff. Questa fase specifica il numero di tentativi e la quantità di ritardo tra di loro.
-
Fase di backoff: questa fase controlla il ritardo tra i tentativi utilizzando la funzione retry-backoff. Questa fase imposta un ritardo minimo, un ritardo massimo e una funzione retry-backoff che definisce la velocità con cui il ritardo aumenta da minimo a massimo. La funzione di backoff può essere aritmetica, esponenziale, geometrica o lineare.
-
Post-backoff fase: questa fase segue la fase di backoff. Specifica un certo numero di tentativi e la quantità di ritardo tra di loro. Questa è la fase finale.
Creazione di una politica HTTP/S di consegna
Puoi definire in che modo Amazon SNS ritenta la consegna dei messaggi agli HTTP/S endpoint utilizzando una politica di consegna in quattro fasi: no-delay, pre-backoff, backoff e post-backoff. Questa policy ti consente di sovrascrivere le impostazioni di riprova predefinite e di personalizzarle in base alla capacità del tuo server HTTP.
Puoi definire la tua politica HTTP/S di consegna come oggetto JSON a livello di argomento o di abbonamento:
-
Topic-level policy: si applica a tutte le HTTP/S sottoscrizioni collegate all'argomento. Usa l'azione
CreateTopicoSetTopicAttributesAPI per impostare questo criterio. -
Subscription-level policy: si applica solo a un abbonamento specifico. Usa l'azione
SubscribeoSetSubscriptionAttributesAPI per impostare questa policy.
In alternativa, puoi anche utilizzare la risorsa AWS: :SNS: :Subscription nei tuoi modelli. CloudFormation
È necessario personalizzare la politica di distribuzione in base alla capacità HTTP/S del server:
-
Un unico server per tutti gli abbonamenti: se tutti gli HTTP/S abbonamenti in un argomento utilizzano lo stesso server, imposta la politica di consegna come attributo dell'argomento per garantire la coerenza tra tutti gli abbonamenti.
-
Server diversi per gli abbonamenti: se gli abbonamenti sono destinati a server diversi, crea una politica di distribuzione univoca per ogni abbonamento, personalizzata in base alla capacità del server specifico.
Puoi anche impostare l'Content-Typeintestazione nella politica di richiesta per specificare il tipo di supporto della notifica. Per impostazione predefinita, Amazon SNS invia tutte le notifiche agli HTTP/S endpoint con il tipo di contenuto impostato su. text/plain; charset=UTF-8 Tuttavia, puoi sovrascrivere questa impostazione predefinita utilizzando il headerContentType campo nella policy di richiesta.
Il seguente oggetto JSON definisce una politica di consegna con tentativi strutturati in quattro fasi:
-
No-delay fase: riprova subito 3 volte.
-
Pre-backoff fase: riprova 2 volte con un intervallo di 1 secondo.
-
Fase di backoff: riprova 10 volte con ritardi esponenziali compresi tra 1 e 60 secondi.
-
Post-backoff fase: riprova 35 volte con un intervallo fisso di 60 secondi.
Amazon SNS effettua un totale di 50 tentativi per recapitare un messaggio prima di scartarlo. Per conservare i messaggi che non possono essere recapitati dopo tutti i tentativi, configura il tuo abbonamento in modo da spostare i messaggi non recapitabili in una coda di lettere morte (DLQ). Per ulteriori informazioni, consulta Code per le lettere morte di Amazon SNS.
Amazon SNS considera rieseguibili tutti gli errori 5XX e i 429 (troppe richieste inviate). Questi errori sono soggetti alla politica di consegna. Tutti gli altri errori sono considerati errori permanenti e non verranno tentati nuovi tentativi. Tuttavia, i messaggi che Amazon SNS rallenta automaticamente a causa delle maxReceivesPerSecond impostazioni non sono soggetti alla politica sui nuovi tentativi di recapito. Self-throttled i messaggi vengono nuovamente accodati e continuano a essere recapitati se la capacità lo consente, senza richiedere tentativi di nuovo tentativo.
Nota
Questa politica di recapito utilizza la maxReceivesPerSecond proprietà per limitare il traffico di recapito a una media di 10 messaggi al secondo per abbonamento. Sebbene questo meccanismo aiuti a evitare che l' HTTP/S endpoint venga sopraffatto da un traffico elevato, è progettato per mantenere un tasso di consegna medio e non impone un limite rigoroso. Potrebbero verificarsi occasionali picchi di traffico di distribuzione superiori al limite specificato, soprattutto se il tasso di pubblicazione è significativamente superiore al limite di limitazione.
Quando il traffico di pubblicazione (in entrata) supera la velocità di consegna (in uscita), può causare un arretrato dei messaggi e una maggiore latenza di consegna. Per evitare tali problemi, assicurati che il maxReceivesPerSecond valore sia in linea con i requisiti di capacità e carico di lavoro HTTP/S del server.
Il seguente esempio di politica di distribuzione sostituisce il tipo di contenuto predefinito a cui inviare le notifiche. 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 politica di consegna è composta da un criterio di riprova, un criterio di limitazione e un criterio di richiesta. In totale, ci sono 9 attributi in una politica di consegna.
| Policy | Description | Vincolo |
|---|---|---|
minDelayTarget |
Il ritardo minimo per un nuovo tentativo. Unità: secondi |
1 al massimo ritardo Di default: 20 |
maxDelayTarget |
Il ritardo massimo per un nuovo tentativo. Unità: secondi |
Ritardo minimo su 3.600 Di default: 20 |
numRetries |
Il numero totale di tentativi, inclusi tentativi immediati, pre-backoff, backoff e post-backoff. | Da 0 a 100 Di default: 3 |
numNoDelayRetries |
Il numero di tentativi da effettuare immediatamente, senza ritardi tra essi. | Uguale o maggiore di 0 Di deafult: 0 |
numMinDelayRetries |
Il numero di tentativi nella fase di pre-backoff, con il ritardo minimo specificato tra essi. | Uguale o maggiore di 0 Di default: 0 |
numMaxDelayRetries |
Il numero di tentativi nella fase post-backoff, con il massimo ritardo tra essi. | Uguale o maggiore di 0 Di default: 0 |
backoffFunction |
Il modello per il backoff tra i nuovi tentativi. |
Una delle quattro opzioni:
Di default: lineare |
maxReceivesPerSecond
|
Il numero medio massimo di recapiti di messaggi al secondo, per abbonamento. | Uguale o maggiore di 1 Impostazione predefinita: nessuna limitazione (nessun limite alla velocità di consegna) |
headerContentType
|
Il tipo di contenuto della notifica inviata agli HTTP/S endpoint. |
Se la policy di richiesta non è definita, il tipo di contenuto è preimpostato su Quando la distribuzione di messaggi non elaborati è disabilitata per una sottoscrizione (impostazione predefinita) o quando la policy di distribuzione è definita a livello di argomento, i tipi di contenuto dell'intestazione supportati sono Quando la distribuzione di messaggi non elaborati è abilitata per una sottoscrizione, sono supportati i seguenti tipi di contenuto:
|
Amazon SNS utilizza la formula seguente per calcolare il numero di nuovi tentativi nella fase di backoff:
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
È possibile controllare la frequenza dei tentativi durante la fase di backoff utilizzando tre parametri:
-
minDelayTarget— Imposta il ritardo per il primo tentativo di nuovo tentativo nella fase di backoff. -
maxDelayTarget— Imposta il ritardo per l'ultimo tentativo di nuovo nella fase di backoff. -
backoffFunction— Determina l'algoritmo utilizzato da Amazon SNS per calcolare i ritardi di tutti i tentativi tra il primo e l'ultimo tentativo. Puoi scegliere tra quattro funzioni di retry-backoff disponibili.
Il diagramma seguente illustra in che modo le diverse funzioni di riavvio dei tentativi influiscono sui ritardi tra i tentativi durante la fase di backoff. La politica di consegna utilizzata per questo esempio include le seguenti impostazioni: 10 tentativi totali, un ritardo minimo di 5 secondi e un ritardo massimo di 260 secondi.
-
L'asse verticale mostra il ritardo (in secondi) per ogni tentativo di nuovo tentativo.
-
L'asse orizzontale rappresenta la sequenza dei tentativi, che va dal primo al decimo tentativo.