use*_*094 20 amazon-sqs amazon-web-services node.js aws-lambda
我有一个带有 SQS 触发器的 Lambda。当它被击中时,来自 SQS 的一批记录进来(我认为通常一次大约 10 个)。如果我从处理程序返回失败的状态代码,将重试所有 10 条消息。如果我返回成功代码,它们都会从队列中删除。如果这 10 条消息中有 1 条失败,而我只想重试那一条怎么办?
exports.handler = async (event) => {
for(const e of event.Records){
try {
let body = JSON.parse(e.body);
// do things
}
catch(e){
// one message failed, i want it to be retried
}
}
// returning this causes ALL messages in
// this batch to be removed from the queue
return {
statusCode: 200,
body: 'Finished.'
};
};
Run Code Online (Sandbox Code Playgroud)
我是否必须手动将该消息重新添加回队列?或者我可以从我的处理程序返回一个状态,指示一条消息失败并应该重试?
use*_*461 16
根据 AWS文档,SQS 事件源映射现在支持开箱即用地处理部分故障。链接文章的要点如下:
ReportBatchItemFailures在您的EventSourceMapping配置中{
"batchItemFailures": [
{ "itemIdentifier": "id2" },
{ "itemIdentifier": "id4" }
]
}
Run Code Online (Sandbox Code Playgroud)
其中id2和id4是批量失败的messageId。
如果您的函数返回以下任意内容,则 Lambda 会将批次视为完全成功
- 空
batchItemFailure列表- 空
batchItemFailure列表- 一个空的
EventResponse- 空值
EventResponse如果您的函数返回以下任一内容,则 Lambda 会将批次视为完全失败:
- 无效的 JSON 响应
- 空字符串
itemIdentifier- 空值
itemIdentifieritemIdentifier键名称错误的ANitemIdentifier消息 ID 不存在的值
是的,您必须手动将失败的消息重新添加回队列。
我建议做的是设置失败计数,这样如果所有消息都失败了,您可以简单地返回所有消息的失败状态,否则如果失败计数 < 10,那么您可以单独将失败的消息发送回队列。
| 归档时间: |
|
| 查看次数: |
6362 次 |
| 最近记录: |