Jou*_*ude 2 amazon-sqs amazon-web-services aws-lambda
我部署了一个 AWS Lambda 函数,该函数在 SQS 队列收到消息时触发。该函数向 Rest API 发出请求,如果响应不是 Ok,则需要再次处理 SQS 消息。
这就是为什么我需要将消息重新发送到队列,但我更愿意以编程方式删除 SQS 消息,尽管我找不到如何配置 SQS。我尝试过消息保留,但似乎触发事件导致消息被删除。
其他可能的选项可能是在 S3 中备份消息或将其保留在 DynamoDB 中,但我想知道是否有更好的选择。
关于这个问题的任何见解都会非常有帮助。
从AWS Lambda 重试行为 - AWS Lambda:
如果您将 Amazon SQS 队列配置为事件源,AWS Lambda 将轮询队列中的一批记录并调用您的 Lambda 函数。如果调用失败或超时,批处理中的每条消息都将返回到队列中,一旦可见性超时期限到期,每个消息都可以进行处理。(可见性超时是 Amazon Simple Queue Service 阻止其他消费者接收和处理消息的时间段)。
一旦调用成功处理了一个批处理,该批处理中的每条消息都将从队列中删除。当消息未成功处理时,它要么被丢弃,要么如果您配置了 Amazon SQS 死信队列,则失败信息将被定向到那里供您分析。
因此,似乎(从阅读本文)一个简单的选项是在队列上设置高可见性超时,然后如果函数无法处理消息则引发错误。此消息将在配置的超时期限内保持不可见,然后将重新出现在队列中进行处理。如果超过允许的重试次数,它将被删除或移至死信队列(如果已配置)。