如果我理解正确,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,使重试变得相当容易。
在我的情况下,我应该使用批处理吗?天真地看,我只需要一对一的关系。换句话说,消息到达。Lambda接收它。如果出错,稍后会自动重试。
相反,我必须遍历所有的消息并尝试进行Axios请求。如果五条消息中的第三条失败了,我会抛出一个错误,Lambda就会停止。那么第四和第五条消息会发生什么?它们会被重新发送到SQS,然后再次被拾取执行吗?
maxReceiveCount
后,只有第5个消息被放置在DLQ上吗?还是消息6、7、8、9和10也会被放置在DLQ上?这将假定消息6-10在每次调用期间都与包含消息5的消息批处理相关。 - Gillfish