Come posso risolvere gli errori "ReceiptHandleIsInvalid" e "InvalidParameterValue" quando uso la chiamata API DeleteMessage di AWS SQS?

2 minuti di lettura
0

Ricevo un errore "ReceiptHandleIsInvalid" o "InvalidParameterValue" quando provo a eliminare messaggi dalla mia coda Amazon Simple Queue Service (Amazon SQS).

Descrizione breve

Quando ricevi un messaggio da una coda Amazon SQS, ricevi anche un handle di ricezione relativo a quel messaggio per FIFO (First-In-First-Out) e le code standard. L'handle di ricezione è obbligatorio quando si elimina o si modifica la visibilità del messaggio.

Se l'handle di ricezione non è corretto, viene visualizzato un errore simile al seguente:

"An error occurred (ReceiptHandleIsInvalid) when calling the DeleteMessage operation: The input receipt handle 'YOUR RECEIPT HANDLE' is not a valid receipt handle."

Se l'handle di ricezione è scaduto, viene visualizzato un errore simile a questo esempio:

"An error occurred (InvalidParameterValue) when calling the DeleteMessage operation: Value 'YOUR RECEIPT HANDLE' for parameter ReceiptHandle is invalid. Reason: The receipt handle has expired."

L’handle di ricezione scade dopo un periodo di timeout di visibilità. Quando scade un timeout di visibilità, il messaggio torna in coda. Quando ricevi nuovamente il messaggio da un consumer, ricevi un nuovo handle di ricezione. Questo errore si verifica perché è stato utilizzato un handle di ricezione precedente invece del più recente.

**Nota:**gli handle di ricezione precedenti potrebbero andare a buon fine se si utilizzano code SQS standard. Tuttavia, per le chiamate API DeleteMessage è consigliabile utilizzare l'handle di ricezione più recente.

Risoluzione

Per evitare errori di gestione della ricevuta errata o scaduta, utilizza l'handle di ricezione corretto allo scopo di eliminare il messaggio entro il periodo di timeout di visibilità della coda SQS.

Se ricevi un messaggio più di una volta, esamina la risposta alla chiamata API ReceiveMessage più recente e identifica il valore ReceiptHandle. Quindi, utilizza il valore ReceiptHandle identificato quando esegui la chiamata API DeleteMessage.

Inoltre, potresti ricevere questo errore quando effettui la chiamata API DeleteMessage:

"An error occurred (ReceiptHandleIsInvalid) when calling the DeleteMessage operation: The receipt handle "YOUR RECEIPT HANDLE" is not valid for this queue."

Questo errore si verifica quando si tenta di eliminare un messaggio con un handle di ricezione proveniente da una coda SQS diversa. Per evitare questo errore, utilizza l'handle di ricezione corretto dalla coda SQS in cui si trova il messaggio.

Informazioni correlate

Best practices for Amazon SQS