当触发Lambda函数无法处理该消息时,如何防止AWS SQS删除该消息?

时间:2019-05-19 21:55:53

标签: amazon-web-services aws-lambda amazon-sqs

我已经部署了一个AWS Lambda函数,该函数会在SQS队列收到消息时触发。该函数向Rest API发出请求,如果响应不正确,则需要再次处理SQS消息。

这就是为什么我需要将消息重新发送到队列,但是我更喜欢以编程方式删除SQS消息,尽管我找不到如何配置SQS。我已经尝试过保留消息,但似乎触发事件会导致删除消息。

其他可能的选项可能是在S3中备份消息或将其保留在DynamoDB中,但是我想知道是否还有更好的选择。

对这个问题的任何见解都会很有帮助。

1 个答案:

答案 0 :(得分:1)

来自AWS Lambda Retry Behavior - AWS Lambda

  

如果您将Amazon SQS队列配置为事件源,则AWS Lambda将轮询队列中的一批记录并调用您的Lambda函数。如果调用失败或超时,则批处理中的每条消息都会返回队列,并且一旦“可见性超时”时间段到期,每条消息都可以进行处理。 (可见性超时是Amazon Simple Queue Service阻止其他使用者接收和处理消息的时间。)

     

一旦调用成功处理了一个批次,该批次中的每条消息都将从队列中删除未成功处理消息时,该消息将被丢弃,或者如果您已配置Amazon SQS死信队列,则会将失败信息定向到该处进行分析。

因此,(通过阅读本文)看来,一个简单的选项是在队列上设置高可见性超时,然后,如果函数无法处理消息,则raise an error。该消息将在配置的超时时间内保持不可见,然后会重新出现在队列中以进行处理。如果超过了允许的重试次数,则将其删除或移至“死信队列”(如果已配置)。