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à.
Quando ricevi un messaggio da una coda Amazon SQS, questo rimane in coda ma diventa temporaneamente invisibile agli altri consumatori. Questa invisibilità è controllata dal timeout di visibilità, che garantisce che altri consumatori non possano elaborare lo stesso messaggio mentre lo stai elaborando. Amazon SQS offre due opzioni per eliminare i messaggi dopo l'elaborazione:
-
Eliminazione manuale: i messaggi vengono eliminati in modo esplicito utilizzando l'azione.
DeleteMessage
-
Eliminazione automatica: supportata in alcuni casi AWS SDKs, i messaggi vengono eliminati automaticamente al termine dell'elaborazione, semplificando i flussi di lavoro.

Casi d'uso del timeout di visibilità
Gestione delle attività di lunga durata: utilizza il timeout di visibilità per gestire attività che richiedono tempi di elaborazione prolungati. Imposta un timeout di visibilità appropriato per i messaggi che richiedono tempi di elaborazione prolungati. Ciò garantisce che altri utenti non ricevano lo stesso messaggio durante l'elaborazione, evitando operazioni duplicate e mantenendo l'efficienza del sistema.
Implementazione di meccanismi di ripetizione dei tentativi: estendi il timeout di visibilità a livello di codice per le attività che non vengono completate entro il timeout iniziale. Se un'attività non viene completata entro il timeout di visibilità iniziale, puoi estendere il timeout a livello di codice. Ciò consente al sistema di rielaborare il messaggio senza che diventi visibile agli altri utenti, migliorando la tolleranza agli errori e l'affidabilità. Combinalo con Dead-Letter Queues (DLQs) per gestire gli errori persistenti.
Sistemi distribuiti di coordinate: utilizzate il timeout di visibilità di SQS per coordinare le attività tra sistemi distribuiti. Imposta dei timeout di visibilità in linea con i tempi di elaborazione previsti per i diversi componenti. Ciò aiuta a mantenere la coerenza e previene le condizioni di gara in architetture complesse e distribuite.
Ottimizza l'utilizzo delle risorse: regola i timeout di visibilità di SQS per ottimizzare l'utilizzo delle risorse nella tua applicazione. Impostando i timeout appropriati, è possibile garantire che i messaggi vengano elaborati in modo efficiente senza occupare inutilmente le risorse. Ciò porta a migliori prestazioni complessive del sistema e a un miglior rapporto qualità-prezzo.
Impostazione e regolazione del timeout di visibilità
Il timeout di visibilità inizia non appena ti viene recapitato un messaggio. Durante questo periodo, dovresti elaborare ed eliminare il messaggio. Se non lo elimini prima della scadenza del timeout, il messaggio diventa nuovamente visibile nella coda e può essere recuperato da un altro consumatore. Il timeout di visibilità predefinito per una coda è di 30 secondi, ma puoi modificarlo in modo che corrisponda al tempo necessario all'applicazione per elaborare ed eliminare un messaggio. È inoltre possibile impostare un timeout di visibilità specifico per i singoli messaggi senza modificare l'impostazione generale della coda. Utilizza l'ChangeMessageVisibility
azione per estendere o abbreviare il timeout a livello di codice in base alle esigenze.
Messaggi e quote in corso
In Amazon SQS, i messaggi in arrivo sono messaggi ricevuti da un consumatore ma non ancora eliminati. Per le code standard, c'è un limite di circa 120.000 messaggi in volo, a seconda del traffico in coda e dell'arretrato di messaggi. Se raggiungi questo limite, Amazon SQS restituisce un OverLimit
errore, indicando che non è possibile ricevere messaggi aggiuntivi fino a quando alcuni messaggi in volo non vengono eliminati. Per le code FIFO, i limiti dipendono dai gruppi di messaggi attivi.
-
Quando si utilizza il polling breve: se questo limite viene raggiunto durante l'utilizzo del polling breve, Amazon SQS restituirà
OverLimit
un errore che indica che non è possibile ricevere messaggi aggiuntivi fino a quando alcuni messaggi in transito non vengono eliminati. -
Quando si utilizza un polling lungo: se utilizzi un polling lungo, Amazon SQS non restituisce un errore quando viene raggiunto il limite di messaggi in corso. Al contrario, non restituirà nuovi messaggi finché il numero di messaggi in transito non scende al di sotto del limite.
Per gestire efficacemente i messaggi in volo:
-
Eliminazione rapida: elimina i messaggi (manualmente o automaticamente) dopo l'elaborazione per ridurre il numero di messaggi in volo.
-
Monitora con CloudWatch: imposta allarmi per un numero elevato di passeggeri in volo per evitare di raggiungere il limite.
-
Distribuisci il carico: se stai elaborando un volume elevato di messaggi, utilizza code o utenti aggiuntivi per bilanciare il carico ed evitare colli di bottiglia.
-
Richiedi un aumento della quota: invia una richiesta al AWS Supporto se sono richiesti limiti più elevati.
Comprensione del timeout di visibilità nelle code standard e FIFO
Sia nelle code standard che in quelle FIFO (First-In-First-Out), il timeout di visibilità aiuta a impedire che più consumatori elaborino lo stesso messaggio contemporaneamente. Tuttavia, a causa del modello di at-least-once consegna di Amazon SQS, non esiste alcuna garanzia assoluta che un messaggio non venga recapitato più di una volta durante il periodo di timeout di visibilità.
-
Code standard: il timeout di visibilità nelle code standard impedisce a più consumatori di elaborare lo stesso messaggio contemporaneamente. Tuttavia, a causa del modello di at-least-once consegna, Amazon SQS non garantisce che un messaggio non venga recapitato più di una volta entro il periodo di timeout di visibilità.
-
Code FIFO: per le code FIFO, i messaggi con lo stesso ID di gruppo di messaggi vengono elaborati in una sequenza rigorosa. Quando un messaggio con un ID di gruppo di messaggi è in corso, i messaggi successivi in quel gruppo non vengono resi disponibili fino a quando il messaggio in corso non viene eliminato o non scade il timeout di visibilità. Tuttavia, ciò non «blocca» il gruppo a tempo indeterminato: ogni messaggio viene elaborato in sequenza e solo quando ogni messaggio viene eliminato o diventa nuovamente visibile il messaggio successivo di quel gruppo sarà disponibile per i consumatori. Questo approccio garantisce un'elaborazione ordinata all'interno del gruppo senza impedire inutilmente al gruppo di recapitare i messaggi.
Gestione degli errori
Se non elabori ed elimini un messaggio prima della scadenza del timeout di visibilità, a causa di errori dell'applicazione, arresti anomali o problemi di connettività, il messaggio diventa nuovamente visibile nella coda. Può quindi essere recuperato dallo stesso consumatore o da un altro consumatore per un altro tentativo di elaborazione. Ciò garantisce che i messaggi non vadano persi anche se l'elaborazione iniziale fallisce. Tuttavia, l'impostazione di un timeout di visibilità troppo elevato può ritardare la ricomparsa dei messaggi non elaborati, rallentando potenzialmente i nuovi tentativi. È fondamentale impostare un timeout di visibilità appropriato in base al tempo di elaborazione previsto per una gestione tempestiva dei messaggi.
Modifica e cessazione del timeout di visibilità
È possibile modificare o terminare il timeout di visibilità utilizzando l'azioneChangeMessageVisibility
:
-
Modifica del timeout: regola il timeout di visibilità in modo dinamico utilizzando.
ChangeMessageVisibility
Ciò consente di estendere o ridurre la durata dei timeout per soddisfare le esigenze di elaborazione. -
Cessazione del timeout: se decidi di non elaborare un messaggio ricevuto, interrompi il timeout di visibilità impostando il valore su 0 secondi dopo l'
VisibilityTimeout
azione.ChangeMessageVisibility
Ciò rende immediatamente il messaggio disponibile per l'elaborazione da parte di altri consumatori.
Best practice
Utilizza le seguenti best practice per gestire i timeout di visibilità in Amazon SQS, tra cui l'impostazione, la regolazione e l'estensione dei timeout, nonché la gestione dei messaggi non elaborati utilizzando Dead-Letter Queues (). DLQs
-
Impostazione e regolazione del timeout. Inizia impostando il timeout di visibilità in modo che corrisponda al tempo massimo normalmente necessario all'applicazione per elaborare ed eliminare un messaggio. Se non sei sicuro del tempo esatto di elaborazione, inizia con un timeout più breve (ad esempio, 2 minuti) ed estendilo se necessario. Implementa un meccanismo heartbeat per estendere periodicamente il timeout di visibilità, assicurando che il messaggio rimanga invisibile fino al completamento dell'elaborazione. Ciò riduce al minimo i ritardi nella rielaborazione dei messaggi non gestiti e impedisce una visibilità prematura.
-
Estendere il timeout e gestire il limite di 12 ore. Se il tempo di elaborazione varia o può superare il timeout inizialmente impostato, utilizza l'
ChangeMessageVisibility
azione per estendere il timeout di visibilità durante l'elaborazione del messaggio. Tieni presente che il timeout di visibilità ha un limite massimo di 12 ore dalla prima ricezione del messaggio. L'estensione del timeout non reimposta questo limite di 12 ore. Se l'elaborazione richiede più tempo rispetto a questo limite, valuta la possibilità di utilizzare AWS Step Functions o suddividere l'attività in fasi più piccole. -
Gestione dei messaggi non elaborati. Per gestire i messaggi che non superano più tentativi di elaborazione, configura una Dead-Letter Queue (DLQ). Ciò garantisce che i messaggi che non possono essere elaborati dopo diversi tentativi vengano acquisiti separatamente per un'ulteriore analisi o gestione, evitando che circolino ripetutamente nella coda principale.