首页 文章

AWS SQS:在消费者中发生错误时移至死信队列

提问于
浏览
4

我尝试使用像sqs-queue-parallel和sqs-consumer这样的npm包来消费节点中SQS的消息

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

但截至目前,它仍在按最大接收计数次数重试消息

是否有可能与其他一些npm包,每当发生错误时它应该直接移动到死信队列?

3 回答

  • 3

    您可以配置SQS队列,以便在1到1000之间收到任意数量的失败消息后将消息移动到死信队列 .

    只有在收到一次失败后才能将消息移动到死信队列,然后修改队列的配置并将“最大接收”值设置为1.这将是队列的“重驱动策略”的一部分 .

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

  • 2

    知道这有点晚了但是认为OP正试图要求一个动态的政策 . 即:

    • 正常错误 - >根据redrive-policy重试 .

    • 但是,对于某些失败,您可能知道即使您尝试了100件物品也无法恢复 . 在那种情况下 - >将消息直接移动到死信队列 .

    如果大概是被问到的话,如何做后者 .

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

    不要相信这是一种“特殊”的方式 .

  • 0

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

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

    要么

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

    所以现在为了将消息从队列移动到死信队列,你不需要在你的代码中做任何其他事情,但只在你的sqs控制台管理器中:

    • 创建一个新队列

    • 称它为死信(或其他)

    • 将"Maximum Receives"值设置为1(这意味着在一次调用"done(error)"之后,该消息将从队列中删除并转到死队列 .

    • 刷新!!!!

    • 返回源队列(原始队列)

    • 去配置队列

    • 设置检索策略

    • 将您提供的名称放入死信队列

    而已!祝你好运,我不得不说sqs是扩展任务的好方法 .

相关问题