我已经设置了一个触发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"))
})
}
}
答案 0 :(得分:0)
一种解决此问题的方法是跟踪哪些消息成功和失败(在map函数中完成),然后在catch部分中将失败消息(可以与ReceiptHandle
一起添加)队列。然后成功抛出错误,而不是抛出错误,这将导致从队列中清除整个批次。
我相信使用deleteMessageBatch
和ReceiptHandle
删除成功的消息并抛出错误,以便其余批次不会自动清除的相反做法是可行的,但是我没有尝试删除-航班信息。
来自https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
Lambda从队列中读取消息时,它会保留在队列中,但会一直隐藏,直到Lambda删除它为止。如果您的函数返回错误,或者在队列的可见性超时之前未完成处理,则它将再次变为可见。