【问题标题】:AWS SQS: Moving to dead letter queue when error happens in consumerAWS SQS:当消费者发生错误时移动到死信队列
【发布时间】:2016-08-24 00:53:23
【问题描述】:

我曾尝试使用 npm 包,如 sqs-queue-parallel 和 sqs-consumer 来消费节点中 SQS 的消息

但最近我有一种机制,当处理过程中特定消息发生错误时,它应该被移动到死信队列

但截至目前,它会继续按最大接收计数次数重试消息

是否可以使用其他一些 npm 包,无论何时发生错误都应该直接移动到死信队列?

【问题讨论】:

    标签: node.js amazon-web-services amazon-sqs


    【解决方案1】:

    知道这有点晚了,但认为 OP 正在尝试要求动态策略。即:

    • 正常错误 -> 根据重新驱动策略重试。
    • 但是,对于某些故障,您可能知道即使尝试一百次也无法恢复。在这种情况下-> 将消息直接移动到死信队列。

    如果可能被问到,如何做后者。

    答案可能是手动将消息复制到死信队列(在这方面它的行为与任何其他队列一样),然后从源队列中删除消息。

    不要相信有一种“特殊”的方法可以做到这一点。

    【讨论】:

      【解决方案2】:

      您可以将 SQS 队列配置为在收到 1 到 1000 条失败消息后将消息移动到死信队列。

      要在仅一次接收失败后将消息移至死信队列,然后修改队列的配置并将“最大接收数”值设置为 1。这将是队列“重新驱动策略”的一部分。

      请参阅以下有关配置队列的 AWS 文档: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html

      【讨论】:

        【解决方案3】:

        您不需要使用新的 npm,因为它会在您处理完消息后自动发生。例如,如果您在完成消息时一直在使用 node-consumer:

        done() //in order to remove from queue due to for success probably
        

        done(err) //in order to keep in queue
        

        所以现在为了将消息从队列移动到死信队列,您不需要在代码中执行任何其他操作,只需在您的 sqs 控制台管理器中执行:

        1. 创建一个新队列
        2. 称其为死消息(或其他)
        3. 将“最大接收次数”值设置为 1(这意味着在一次调用 “完成(错误)”消息将从您的队列中删除并进入死队列。
        4. 刷新!!!!!!
        5. 回到您的源队列(原始队列)
        6. 去配置队列
        7. 设置检索策略
        8. 把你给死信队列的名字放进去

        就是这样!祝你好运,我不得不说 sqs 是扩展任务的好方法。

        【讨论】:

          【解决方案4】:

          我认为 OP 是在询问是否有办法在处理消息的“单一失败”之后将消息移动到 DLQ。根据这 2 个 SQS 文档,我看到了以下 2 点:

          1. 如果源队列有一个将 maxReceiveCount 设置为 5 的重新驱动策略,并且源队列的使用者收到 6 次消息而从未删除它,Amazon SQS 会将消息移动到死信队列 (https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) .
          2. 最大接收值必须在 1 到 100 之间 (https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html)

          这意味着即使您将最大接收值设置为 1,您的消费者仍会收到“至少两次”消息

          我找不到任何解决方案,您可以在一次失败后将失败的消息移动到 DLQ。很想听听其他人对此的看法

          【讨论】:

            猜你喜欢
            • 2020-07-01
            • 2020-02-14
            • 2018-10-11
            • 2022-07-28
            • 2022-07-22
            • 1970-01-01
            • 2021-02-18
            • 2016-08-26
            • 1970-01-01
            相关资源
            最近更新 更多