跳至内容

为什么我的 Amazon SQS 消息意外发送到 DLQ?

1 分钟阅读
0

我配置了 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 重新驱动策略的 Maximum receives(最大接收)值增加到 1,000。有关详细信息,请参阅使用 Amazon SQS 控制台配置死信队列

您尝试使用过期 ReceiptHandle 或在可见性超时期后删除 SQS 消息

重试后,消息移至 DLQ。当您使用主队列中较早的 ReceiptHandle 执行 DeleteMessage 操作时,可能会出现 QueueDoesNotExist 错误。您必须在配置的 VisibilityTimeout 窗口内删除消息。有关详细信息,请参阅我如何解决对 Amazon SQS 队列进行 API 调用时出现的 QueueDoesNotExist 错误?

相关信息

在 Amazon SQS 中使用死信队列