使用 SQS 队列的 lambda 函数如何将消息发送到死信队列?

Ari*_*Jnr 5 javascript amazon-sqs amazon-web-services node.js aws-lambda

我有一个 AWS lambda 函数,它使用来自 AWS SQS 队列的数据。如果该 lambda 在处理消息数据时发现问题,则必须将该消息添加到死信队列中。

我发现的文档并不清楚如何让 lambda 将消息发送到死信队列。这是如何实现的?

我应该使用 sendMessage() 方法,就像插入标准队列一样,还是有更好的方法?

Kre*_*ase 7

如果返回该消息太多次(可通过属性在队列上配置), AWS 会自动将消息发送到您的死信队列 (DLQ) - 通常,如果您收到一条消息,但不删除它(如果例如,您在处理它时遇到了一些异常)。这是使用 DLQ 的最简单方法 - 让 AWS 为您将消息放在那里。receiveMessagemaxReceiveCount

但是,手动向 DLQ 发送消息并没有什么问题。它没有什么特别的 - 它只是另一个队列 - 您可以从它发送和接收消息,甚至给它自己的 DLQ!

手动向 DLQ 发送消息在多种情况下很有用,最简单的一种情况就是您的情况:当您知道消息已损坏(并且希望节省尝试重新处理它的时间)时。另一个例子是,如果您需要快速销毁主队列中的旧项目,但仍保存这些消息以供稍后处理 - 使您能够通过首先处理较新的事件来赶上积压的情况。

手动向 DLQ 发送消息时要记住的关键事项是:

  1. 首先将消息发送到队列
  2. 将消息标记为在原始队列中已使用(使用deleteMessage),以便 AWS 的自动机制稍后不会将其放在那里。
    • 如果您首先从原始队列中删除消息,则消息丢失的可能性很小(即:如果在将消息存储到其他地方之前崩溃或出现错误)