繁体   English   中英

处理 AWS SQS 死信队列

[英]Handle AWS SQS Dead Letter Queue

我已经按照这篇文章在 AWS 中配置了一个 DLQ: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html

这是我在 sprint 启动应用程序中的消费者:

@SqsListener(value = "${cloud.aws.endpoint.queue-name}", deletionPolicy = SqsMessageDeletionPolicy.DEFAULT)
private void getMessage(final Event event) {
    // process event
}

但是,当事件处理过程中出现异常,比如NPE,异常调用外部REST API等,处理失败的消息不会流入死信队列。

我错过了什么吗?

您提供的信息很少,很难提供帮助,但请检查以下内容:

也许您的队列设置不正确

死信队列重定向与消费者设置无关,而是与在 aws 中创建队列时配置的方式有关。 因此,请使用 aws cli get-queue-attributes命令https://docs.aws.amazon.com/cli/latest/reference/sqs/get-queue-attributes.html检查您的源队列是否具有正确的RedrivePolicy output 应该显示类似于此示例的内容。 还控制maxReceiveCount在源队列中是否正确设置。 从文档:

maxReceiveCount – The number of times a message is delivered
to the source queue before being moved to the dead-letter queue.
When the ReceiveCount for a message exceeds the maxReceiveCount for a queue,
Amazon SQS moves the message to the dead-letter-queue.

如果死信队列未正确配置,请按照 aws create-queue https://docs.aws.amazon.com/cli/latest/reference/sqs/create-queue.html cli 示例设置死信队列以源队列。

尝试仅使用带有send-message https://docs.aws.amazon.com/cli/latest/reference/sqs/send-message.html的 cli 将消息发送到 spring 之外的队列,并确保死信队列被正确填充。

可能SqsListener没有指向正确的源队列

消息可能没有到达附加了死信队列的正确源队列。 cloud.aws.endpoint.queue-name应该是在您的应用程序属性application.yml中查找队列名称的路径,就像您刚刚定义的那样:

cloud:
 aws:
  endpoint:
   queue-name: "my-queue-name"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM