首页 > 解决方案 > 删除消息时如何处理 AWS SQS ReceiptHandleIsInvalid 错误?

问题描述

我从使用 aws-sdk 从 SQS 标准队列中提取和删除消息的 Lambda 收到以下错误:

{
    "errorType": "ReceiptHandleIsInvalid",
    "errorMessage": "The receipt handle \"some-long-string\" is not valid for this queue.",
    "code": "ReceiptHandleIsInvalid",
    "stack": [
        "ReceiptHandleIsInvalid: The receipt handle \"some-long-string\" is not valid for this queue.",
    ],
    "message": "The receipt handle \"some-long-string\" is not valid for this queue.",
    "time": "2019-07-25T23:01:38.402Z",
    "requestId": "a1e5b6c2-4424-540c-9ce7-e376733674c8",
    "statusCode": 404,
    "retryable": false,
    "retryDelay": 55.62516824566506
}

Lambda 需要 150-400 毫秒来处理,并且在 Lambda 结束时的 deleteMessage 操作似乎失败了。文档说这是由于收据句柄无效,但是是什么使它无效?消息是否不再在队列中?

队列的 MessageRetentionPeriod 为 14 天,Lambda 的 batchSize 为 1,reservedConcurrency 也为 1。

我怀疑这个 lambda 正在继续处理许多相同的消息并且未能删除它们。截至目前,有 2,616 条消息可用,14 条正在运行。我们应该在队列中看到最多 50-100 条消息。

有任何想法吗?这可能是什么原因造成的?

编辑 1:4 小时后,可用消息为 2,609 和 46 在飞行中。

标签: amazon-web-servicesaws-sdkamazon-sqs

解决方案


推荐阅读