[英]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.