當我使用 Amazon SQS DeleteMessage API 呼叫時,如何對 "ReceiptHandleIsInvalid" 和 "InvalidParameterValue" 錯誤進行疑難排解?

1 分的閱讀內容
0

當我嘗試從 Amazon Simple Queue Service (Amazon SQS) 佇列刪除訊息時,我會收到 "ReceiptHandleIsInvalid" 或 "InvalidParameterValue" 錯誤。

簡短說明

當您收到來自 Amazon SQS 佇列的訊息時,您還會收到該訊息的 FIFO (先進先出) 和標準佇列的接收控點。當您刪除或變更訊息的可見性時,需要接收控點。

如果接收控點不正確,則您會收到類似於下列範例的錯誤:

「呼叫 DeleteMessage 作業時發生錯誤 (ReceiptHandleIsInvalid): 輸入接收控點 'YOUR RECEIPT HANDLE' 不是有效的接收控點。」

如果接收控點已過期,則您會收到類似於下列範例的錯誤:

「呼叫 DeleteMessage 作業時發生錯誤 (InvalidParameterValue): 參數 ReceiptHandle 的值 'YOUR RECEIPT HANDLE' 無效。原因: 接收控點已過期。」

接收控點會在可見性逾時期間後過期。當可見性逾時到期時,訊息即會返回到佇列。當您再次收到來自取用者的訊息時,即會取得新的接收控點。發生此錯誤的原因是您使用較舊的接收控點,而不是最新的接收控點。

**注意事項:**使用標準 SQS 佇列時,較舊的接收控點可能會成功。但最佳實務是將最新的接收控點用於 DeleteMessage API 呼叫。

解決方案

若要避免不正確的接收控點或過期的接收控點錯誤,請使用正確的接收控點刪除 SQS 佇列可見性逾時期間內的訊息。

如果您不只收到一次訊息,請檢閱最近的 ReceiveMessage API 呼叫回應,並識別 ReceiptHandle 值。然後,當您進行 DeleteMessage API 呼叫時,請使用識別的 ReceiptHandle 值。

此外,當您進行 DeleteMessage API 呼叫時,您可能會收到此錯誤:

「呼叫 DeleteMessage 作業時發生錯誤 (ReceiptHandleIsInvalid): 接收控點 "YOUR RECEIPT HANDLE" 對此佇列無效。」

當您嘗試刪除來自不同 SQS 佇列的接收控點的訊息時,即會發生此錯誤。若要避免此錯誤,請使用訊息所在的 SQS 佇列中的正確接收控點。

相關資訊

Amazon SQS 的最佳實務

AWS 官方
AWS 官方已更新 6 個月前