使用部分批处理响应使 SQS 消息再次可见

Mar*_*ark 9 batch-processing amazon-sqs amazon-web-services aws-lambda aws-sqs-fifo

假设:

  • AWS Lambda 以 10 个元素批量处理来自 AWS SQS FIFO 队列的消息,具有 25 个可用消息组 ID(以随机方式分配)
  • 处理一条消息大约需要 30-60 秒
  • SQS 消息可见性超时设置为 10 分钟
  • 集成触发器 Lambda-SQS 已启用“部分批量响应”

当 Lambda 返回带有失败消息 ID 的部分批处理响应时,例如:

{
    "batchItemFailures": [
        {
            "itemIdentifier": "d4c7c57f-c12c-4639-abe3-3a0d37690790"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

成功处理的消息将从队列中删除。但是,批次中失败的消息仍在等待可见性超时,而不是立即对消费者可见。失败消息的行为是否正确?或者让它们立即可见的唯一方法是调用 SQS API 并将可见性超时更改为 0?

小智 2

虽然我不能谈论 FIFO SQS 队列,但我可以说我在标准 SQS 队列中看到了这种行为。

我假设在 batchItemFailures 中返回的项目将立即设置为可见,但它们确实似乎保持在飞行中,直到 VisibilityTimeout 过期。

我的解决方案是在返回 batchItemFailures 之前通过 SQS API 手动将消息可见性超时更改为 0。