【发布时间】:2019-07-01 14:37:59
【问题描述】:
如果我理解正确,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"
}
]
}
有 Records 数组。如果我将批量大小设置为 5,那么如果 SQS 中有 5 条消息,它们将包含在数组中。如果有 10 条消息,则 Lambda 将被调用两次,每条 Record 中有 5 条消息。
我现在有点困惑,不知道该采取什么方法。我的 Lambda 相当简单。它将是对外部服务的 Axios POST 请求。如果它出错,我会抛出一个错误。我什至可以使用 axios-retry,让重试变得相当容易。
我应该在我的情况下使用批处理吗?天真地看着,我只需要1对1。换句话说,消息到达。拉姆达接受它。如果出错,稍后会自动重试。
相反,我必须遍历所有消息并尝试 Axios 请求。如果五条消息中的第三条失败了怎么办,在这种情况下我会抛出一个错误并且 Lambda 会停止。消息四和五会发生什么?他们是否被重新发送到 SQS,然后再次被拾起以进行另一次执行?
【问题讨论】:
标签: amazon-web-services lambda amazon-sqs