AWS Lambda - 死信队列最佳实践的死信队列

AWS Lambda - dead letter queue for dead letter queue best practices

我有一个 lambda 函数,我想为其创建一个 SQS 死信队列。我首先在 terraform 中创建 SQS:

  resource "aws_sqs_queue" "my_lambda_dlq" {
  name                      = "my_lambda_dlq"
  delay_seconds             = 90
  max_message_size          = 2048
  message_retention_seconds = 86400
  receive_wait_time_seconds = 10
  redrive_policy = jsonencode({
    deadLetterTargetArn = aws_sqs_queue.terraform_queue_deadletter.arn
    maxReceiveCount     = 4
  })

  tags = local.default_tags
}

这是来自 terraform 的示例。但是,我卡在了 redrive_policy.

  1. 我没理解错吗,这给SQS队列设置了一个死信队列?
  2. 如果我设置 redrive_policy,这意味着我在 DLQ 上设置了 DLQ。我觉得可以在 DLQ 上设置 DLQ 等等。

我找不到与此相关的任何最佳实践。有人有这方面的经验吗?

我在这里的主要目标是不丢失任何消息。 谢谢, 夜光

通过指定 redrive_policy,您可以配置将无法处理/失败的消息发送到的位置。您将这些消息发送到的队列称为 dlq / dead-letter-queue,但它仍然是一个普通队列。

是的,一个 DLQ 可以再次拥有另一个 DLQ,因为每个 DLQ 本身仍然只是一个队列。我想不出任何情况下你会想要它,但没有什么能阻止你这样做。

“如果我设置 redrive_policy,这意味着我在 DLQ 上设置 DLQ” - 从技术上讲,dlq 不存在,AWS 只知道队列。通过将一个队列配置为另一个的 dlq,您不会改变两者都是队列的事实。如果任何队列被配置为任何其他队列的重新驱动目标,那么它就是一个 DLQ。