【问题标题】:SQS all message goes to dead letter queueSQS 所有消息进入死信队列
【发布时间】:2021-03-16 17:19:44
【问题描述】:

我已经使用 terraform 配置了一个 SQS 队列和一个额外的死信队列。

resource "aws_sqs_queue" "sqs_deadletter" {
  name = "worker-dead-letter"
}

resource "aws_sqs_queue" "sqs" {
  name = "worker"
/* TODO: If I enable this all messages goes to the dead letter queue
  redrive_policy = jsonencode({
    deadLetterTargetArn = aws_sqs_queue.sqs_deadletter.arn
    maxReceiveCount = 4
  })
*/
}

resource "aws_lambda_event_source_mapping" "sqs" {
  event_source_arn = aws_sqs_queue.sqs.arn
  function_name = aws_lambda_function.worker.arn
  enabled = true
  batch_size = var.batch_size
}

我使用以下处理程序来处理我的消息。

@Introspected
class LegacyToModernRequestHandler : MicronautRequestHandler<SQSEvent, Unit>() {
    private val logger = KotlinLogging.logger {}

    override fun execute(input: SQSEvent) {
        input.records.forEach {
            handle(it)
        }
    }

    private fun handle(message: SQSMessage) {
        val key = message.body
        logger.info { "LegacyToModernRequestHandler($key)" }
    }
}

但我所有的消息都发送到 DLQ。如何指示成功处理,以免发生这种情况?

【问题讨论】:

    标签: java kotlin terraform amazon-sqs micronaut


    【解决方案1】:

    如果您未使用 AUTO_ACKNOWLEDGEMENT 模式,则必须明确确认消息才能成功处理。否则它将进入DLQ。您能说明一下您是如何配置 SQS 队列的吗?

    【讨论】:

    • 您是否在处理完消息后发送确认?
    • 我正在处理它,正如您在上面的代码中看到的那样。除此之外不做任何事情。
    猜你喜欢
    • 2020-02-14
    • 2019-09-27
    • 2018-10-25
    • 2022-07-28
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多