【问题标题】:Number of deleted messages is twice as many as received messages删除的消息数量是收到消息的两倍
【发布时间】:2023-01-05 23:33:23
【问题描述】:

我用 terraform 创建了 SQS 服务

resource "aws_sqs_queue" "ses_queue" {
  name                       = "ses_queue"
  message_retention_seconds  = 86400
  receive_wait_time_seconds  = 1
  visibility_timeout_seconds = 15
}

resource "aws_lambda_event_source_mapping" "send_email_message" {
  event_source_arn = aws_sqs_queue.ses_queue.arn
  function_name    = aws_lambda_function.send_email_message.function_name
  batch_size       = 5
}

我正在使用 lambda 函数发送电子邮件

for record in event.get("Records"):
    receipt_handle = record.get("receiptHandle", "")
    request_body = record.get("body")
    response = send_email(request_body)
    if response:
        sqs_client.delete_message(QueueUrl=constants.SES_QUEUE_URL, ReceiptHandle=receipt_handle)

我想知道为什么删除的消息数量是收到的消息数量的两倍

【问题讨论】:

  • 只是想知道是不是因为你在lambda中删除了消息,也因为lambda返回后SQS会自动删除消息?
  • IIRC,如果没有删除,消息将在可见性超时过去后返回到队列中,并且可以再次使用。所以我认为消息不会自动从队列中删除。

标签: python amazon-web-services aws-lambda terraform amazon-sqs


【解决方案1】:

如果您的 Lambda 函数无错终止,Lambda 事件源映射已经从队列中删除消息:

如果您的函数成功处理了批处理,Lambda 将从队列中删除消息。 — Source

在您的功能代码中,您也明确删除了您处理的消息,这意味着删除发生了两次.

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2014-02-24
    • 2021-04-25
    • 1970-01-01
    • 2021-02-10
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多