当前位置: 首页 > 知识库问答 >
问题:

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

长孙正卿
2023-03-14

我有一个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,在DLQ上设置DLQ,以此类推。

我找不到这方面的任何最佳做法。有人有这方面的经验吗?

我在这里的主要目标是不释放任何信息。谢谢,Luminita

共有1个答案

岳朝
2023-03-14

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

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

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

 类似资料:
  • 死信队列(Dead Letter Queue)本质上同普通的Queue没有区别,只是它的产生是为了隔离和分析其他Queue(源Queue)未成功处理的消息。 创建死信队列的方法参见createQueue() API,与创建普通队列无异, 死信队列不可调用deadMessage(), deadMessageBatch API,其他操作都与对普通Queue的操作无异。 为了将源Queue的未能成功处理

  • 对于异步的触发器,平台会对函数失败的任务进行最多3次重试。 在新建触发器的时候,为触发器配置一条死信队列,从用户的EMQ队列中选择一条,用于接收函数失败的任务。 在设置死信队列前,请对group: CIf76b0600-24e9-42c4-acf3-d491fbd9fd71​ 授予 FULL_CONTROL 权限,若不授予权限,平台将丢弃失败的任务信息。 消息的内容如下,以后可能增加字段,请用户在

  • 什么是最好的方法来实现死信队列(DLQ)的概念在Spring Boot 2.0应用程序中使用sping-kafka 2.1. x有所有的消息被处理失败的@KafkaListener方法的一些bean发送到一些预定义的Kafka DLQ主题并且不丢失一条信息? 因此,Kafka的记录是: 已成功处理, 处理失败,并发送到DLQ主题, 处理失败,未发送到DLQ主题(由于意外问题),因此将再次被侦听器使

  • 未创建我的exchange和dlq。我在下面的YML中有以下内容。我确实创建了一个匿名队列,但也没有发布消息。任何想法。

  • 我正在尝试设计一个基于SQS、Lambda和SNS的小型消息处理系统。在失败的情况下,我希望将消息排入死信队列(DLQ)中,并调用webhook。 目前,如果一切顺利,流程应该是这样的: SQS(用于处理重试)将消息排入队列 lambda由SQS调用并处理消息 lambda发送webhook,并正常完成 如果lambda中的某些东西出错(无法调用success webhook,无法处理手头的任务)

  • 我有一个使用Spring Cloud Streams-RabbitMQ在微服务中交换消息的项目。对我的项目至关重要的一件事是,我不能丢失任何信息。 null 我是这些框架的新手,我希望你能帮助配置我的...