我設定了 Amazon Simple Queue Service (Amazon SQS) 無效字母佇列 (DLQ)。我的 Amazon SQS 訊息意外移動到了 DLQ,我想了解原因。
解決方法
您的 Amazon SQS 訊息可能會因為以下原因移至 DLQ。
ReceiveCount 超過 maxReceiveCount
預設的 maxReceiveCount 值為 10。當佇列的 ReceiveCount 值超過 maxReceiveCount 值時,Amazon SQS 會將訊息移至 DLQ。若要解決此問題,最佳實務是將 maxReceiveCount 值設定得夠大,以允許 Amazon SQS 進行重試。例如,如果將 maxReceiveCount 值設為 1,則一次訊息接收失敗就會導致該訊息移至 DLQ。
您的 Lambda 函式需要額外組態
如果您使用 AWS Lambda 函式來處理 Amazon SQS 佇列中的訊息,則可能需要重新設定您的函式。如需詳細資訊,請參閱為什麼我的 Lambda 函式會重試有效的 Amazon SQS 訊息,並將其放入無效字母佇列中?
您使用 AWS 管理主控台查看 SQS 訊息
您在 AWS 管理主控台上查看的 SQS 訊息可能會移至 DLQ,因為其觸發了佇列的重新驅動政策。您可以將 DLQ 重新驅動政策的最大接收次數值增加到最多 1,000。如需詳細資訊,請參閱使用 Amazon SQS 主控台設定無效字母佇列。
您嘗試刪除的 SQS 訊息可能已超過 ReceiptHandle 的有效期限,或已超過可見逾時期間
重試後,訊息將移至 DLQ。當您使用主佇列中較早的 ReceiptHandle 執行 DeleteMessage 作業時,可能會發生 QueueDoesNotExist 錯誤。您必須在設定的 VisibilityTimeout 時段內刪除郵件。如需詳細資訊,請參閱如何在對 Amazon SQS 佇列進行 API 呼叫時,出現的 QueueDoesNotExist 錯誤進行疑難排解?
相關資訊
在 Amazon SQS 中使用無效字母佇列