处理SQS在batchSize> 1时触发的lambda中的错误

时间:2019-06-04 17:43:00

标签: aws-lambda amazon-sqs

我已经设置了一个触发lambda函数的AWS SQS队列。作为默认行为,lambda一次最多可以触发10条消息(默认为batchSize)。

如果lambda出于任何原因失败,它将使整个批次失败,并最终重试。但是,假设我有一封发送lambda的电子邮件,它成功地执行了N个第一种情况,但是在N + 1种情况下失败。如果重试整个批次,则会重复发送电子邮件。

目前,我只能考虑将batchSize设置为1以避免此问题,但我希望避免这种情况。还有另一种方法吗?

节点代码非常简单,就像这样:

struct ContentView: View {

    @State var showsAlert = false

    var body: some View {
        Button(action: {
            self.showsAlert = true
        }, label: {
            Text("asdf")
        }).presentation($showsAlert, alert: {
            Alert(title: Text("Hello"))
        })
    }
}

1 个答案:

答案 0 :(得分:0)

一种解决此问题的方法是跟踪哪些消息成功和失败(在map函数中完成),然后在catch部分中将失败消息(可以与ReceiptHandle一起添加)队列。然后成功抛出错误,而不是抛出错误,这将导致从队列中清除整个批次。

我相信使用deleteMessageBatchReceiptHandle删除成功的消息并抛出错误,以便其余批次不会自动清除的相反做法是可行的,但是我没有尝试删除-航班信息。

来自https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

Lambda从队列中读取消息时,它会保留在队列中,但会一直隐藏,直到Lambda删除它为止。如果您的函数返回错误,或者在队列的可见性超时之前未完成处理,则它将再次变为可见。