amazon-web-services - AWS-SQS批处理大小和Lambda方法

标签 amazon-web-services lambda amazon-sqs

如果我理解正确,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。换句话说,消息到达了。 Lambda接过。如果错误,它将在稍后自动重试。

相反,我将不得不遍历所有消息并尝试Axios请求。如果五个消息中的第三个失败,那我抛出一个错误并且Lambda停止了该怎么办。消息四和消息五会怎样?他们是否不满意SQS,然后再次选择执行另一次执行?

最佳答案

我只需要1到1。换句话说,消息就到了。 Lambda需要
它。如果错误,它将在稍后自动重试。


在上述情况下,我认为您不需要批处理。


如果五则讯息中的三分之一失败了,那我会抛出一个
错误,Lambda停止。消息四和消息五会怎样?
他们是否不满意SQS,然后再次选择执行另一次执行?


如果您的Lambda错误(基于SQS visibility timeoutredrive policy配置),则不会从队列中删除消息。 SQS将根据配置再次触发Lambda。如果已配置DLQ,则在达到maxReceiveCount之后,失败的消息将被添加到DLQ并从主队列中删除。

关于amazon-web-services - AWS-SQS批处理大小和Lambda方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54574014/

相关文章:

amazon-web-services - 如何每次从s3下载新上传的文件到ec2

amazon-web-services - 什么是 AWS 全局加速器 ENI?

android - 使用 lambda 表达式创建一个 AlertDialog

amazon-web-services - AWS Redshift 列式存储与分布方式

c# - 是否有一个 LINQ 语句可以根据其属性之一的最大值从枚举中选择一个对象?

python - 将字典理解应用于 defaultdict

aws-lambda - 将消息从SNS发布到运动

java - 在 Amazon SQS 队列中,我们对不同组 ID 的数量有限制吗?

javascript - SNSDestination 导致意外的 key 错误

amazon-web-services - (AWS)无法在我选择的VPC中启动RDS