Perché la mia coda FIFO di Amazon SQS non restituisce tutti i messaggi o i messaggi in altri gruppi di messaggi?

Ultimo aggiornamento: 26/08/2021

La coda Amazon Simple Queue Service (Amazon SQS) First-In-First-Out (FIFO) non restituisce alcuni messaggi durante la chiamata all'API ReceiveMessage. Perché la coda SQS FIFO non restituisce tutti i messaggi provenienti da un ID gruppo di messaggi specifico o da altri gruppi di messaggi?

Risoluzione

Per le code FIFO, non puoi richiedere di ricevere messaggi da un ID gruppo di messaggi specifico. Quando si specifica un parametro MaxNumberOfMessages nella chiamata API ReceiveMessage, SQS restituisce il maggior numero possibile di messaggi con lo stesso ID gruppo di messaggi. Altri utenti o altre chiamate ReceiveMessage possono quindi elaborare i messaggi con un ID gruppo di messaggi diverso.

Per le code FIFO, quando ricevi un messaggio appartenente a un particolare ID gruppo di messaggi, tieni presente quanto segue:

  • È necessario eliminare o spostare i messaggi nella chiamata di ricezione corrente prima di poter ricevere più messaggi dallo stesso ID gruppo.
    Nota: i messaggi devono essere spostati dallo stato disponibile in fase di consegna.
  • Non è possibile ricevere messaggi in altri gruppi di messaggi.

Una coda FIFO esamina i primi 20.000 messaggi per determinare il gruppo di messaggi disponibile. Se tutti i gruppi di messaggi nei primi 20.000 messaggi sono bloccati a causa di messaggi in fase di consegna, i messaggi provenienti da altri gruppi oltre i primi 20.000 non verranno restituiti. Per ulteriori informazioni, consulta Evitare grandi backlog di messaggi con lo stesso ID di gruppo.

Esempio A

Una coda FIFO contiene un totale di 20.001 messaggi. I primi 20.000 messaggi appartengono al gruppo di messaggi 1 e l'ultimo messaggio appartiene al gruppo di messaggi 2. Quando si tenta di ricevere messaggi dalla coda, si riceve un messaggio solo dal gruppo 1. Qualsiasi chiamata ReceiveMessage consecutiva comporta una ricezione vuota. Ciò accade perché FIFO esamina solo i messaggi che appartengono al gruppo 1 e quel gruppo è bloccato dalla chiamata corrente.

Esempio B

Una coda FIFO contiene un totale di 20.000 messaggi. I primi 19.999 messaggi appartengono al gruppo di messaggi 1 e l'ultimo messaggio appartiene al gruppo di messaggi 2. Quando si tenta di ricevere messaggi dalla coda, la prima chiamata ReceiveMessage riceve un messaggio appartenente al gruppo 1. La seconda chiamata ReceiveMessage riceve un messaggio appartenente al gruppo 2. Eventuali chiamate ReceiveMessage aggiuntive comportano una ricezione vuota poiché entrambi i gruppi sono ora bloccati dalle chiamate correnti.


Questo articolo ti è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?