[英]AWS - SQS Batch Size and Lambda approach
如果我理解正确,Lambda 上的批量大小设置决定了从 SQS 一次扫描中接收多少条消息。 因此这个 JSON(取自测试 Lambda SQS);
{
"Records": [
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"receiptHandle": "MessageReceiptHandle",
"body": "FAIL",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "123456789012",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {
},
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:eu-west-1:123456789012:MyQueue",
"awsRegion": "eu-west-1"
}
]
}
有记录数组。 如果我将批量大小设置为 5,那么如果 SQS 中有 5 条消息,它们将包含在数组中。 如果有 10 条消息,则 Lambda 将被调用两次,每条记录中有 5 条消息。
我现在有点困惑,至于采取什么方法。 我的 Lambda 相当简单。 它将是对外部服务的 Axios POST 请求。 如果它出错,我会抛出一个错误。 我什至可以使用 axios-retry,让重试变得相当容易。
我应该在我的情况下使用批处理吗? 天真地看着,我只需要1对1。换句话说,消息到达。 拉姆达接受它。 如果出错,稍后会自动重试。
相反,我将不得不遍历所有消息并尝试 Axios 请求。 如果五条消息中的第三条失败了怎么办,在这种情况下我会抛出一个错误并且 Lambda 会停止。 消息四和五会发生什么? 他们是否被重新发送到 SQS,然后再次被拾起以进行另一次执行?
如果五条消息中的第三条失败了怎么办,在这种情况下我会抛出一个错误并且 Lambda 会停止。 消息四和五会发生什么? 他们是否被重新发送到 SQS,然后再次被拾起以进行另一次执行?
根据 AWS 文档,SQS 事件源映射现在支持开箱即用地处理部分故障。 为此,您必须在EventSourceMapping
配置中包含ReportBatchItemFailures
。 因此,如果五条消息中有三分之一失败,则不要抛出异常,而是跟踪失败消息的 messageId 并继续处理第 4 条和第 5 条消息。 返回
{
"batchItemFailures": [
{ "itemIdentifier": "id3" }
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.