AWS SQS:当消费者发生错误时,转移到死信队列

我已经尝试使用npm软件包,如sqs-queue-parallel&sqs-consumer来消费节点中的SQS消息

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

但是到目前为止,它仍然以最大接收次数重试消息

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

您可以configuration您的SQS队列,以便在收到1到1000之间的任何失败消息之后,将消息移动到死信队列。

要在收到一个失败的邮件后将邮件移动到死信队列,请修改您的队列configuration,并将“最大接收”值设置为1.这将成为您队列的“重新启动策略”的一部分。

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

知道这有点晚了,但认为OP正试图要求一个dynamic的政策。 即:

  • 在正常的错误 – >重试根据redrive政策。
  • 但是,对于某些故障,您可能知道即使尝试了一百个项目,也无法恢复。 在这种情况下 – >将消息直接移动到死信队列中。

如果大概是什么问,怎么做后者。

答案可能是手动将消息复制到死信队列(它就像其他任何队列那样),然后从源队列中删除消息。

不要相信有一个“特殊”的方式来做到这一点。

你不需要使用一个新的npm,当你完成一个消息处理时,它会自动发生。 例如,如果您在完成消息时使用了节点使用者,则:

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

要么

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

所以现在为了将消息从队列移动到死信队列中,您不需要在代码中执行任何其他操作,只能在您的代码中使用sqs console manager:

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

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