我尝试使用像sqs-queue-parallel和sqs-consumer这样的npm包来消费节点中SQS的消息
但最近我有机制,当处理时特定消息发生错误时,它应该被移动到死信队列
但截至目前,它仍在按最大接收计数次数重试消息
是否有可能与其他一些npm包,每当发生错误时它应该直接移动到死信队列?
您可以配置SQS队列,以便在1到1000之间收到任意数量的失败消息后将消息移动到死信队列 .
只有在收到一次失败后才能将消息移动到死信队列,然后修改队列的配置并将“最大接收”值设置为1.这将是队列的“重驱动策略”的一部分 .
请参阅以下有关配置队列的AWS文档:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html
知道这有点晚了但是认为OP正试图要求一个动态的政策 . 即:
正常错误 - >根据redrive-policy重试 .
但是,对于某些失败,您可能知道即使您尝试了100件物品也无法恢复 . 在那种情况下 - >将消息直接移动到死信队列 .
如果大概是被问到的话,如何做后者 .
答案可能是手动将消息复制到deadletter队列(它的行为与此方面的任何其他队列一样),然后从源队列中删除消息 .
不要相信这是一种“特殊”的方式 .
您不需要使用新的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是扩展任务的好方法 .
3 回答
您可以配置SQS队列,以便在1到1000之间收到任意数量的失败消息后将消息移动到死信队列 .
只有在收到一次失败后才能将消息移动到死信队列,然后修改队列的配置并将“最大接收”值设置为1.这将是队列的“重驱动策略”的一部分 .
请参阅以下有关配置队列的AWS文档:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html
知道这有点晚了但是认为OP正试图要求一个动态的政策 . 即:
正常错误 - >根据redrive-policy重试 .
但是,对于某些失败,您可能知道即使您尝试了100件物品也无法恢复 . 在那种情况下 - >将消息直接移动到死信队列 .
如果大概是被问到的话,如何做后者 .
答案可能是手动将消息复制到deadletter队列(它的行为与此方面的任何其他队列一样),然后从源队列中删除消息 .
不要相信这是一种“特殊”的方式 .
您不需要使用新的npm,因为当您完成处理消息时它会自动发生 . 例如,如果您在完成消息后使用了node-consumer,那么:
要么
所以现在为了将消息从队列移动到死信队列,你不需要在你的代码中做任何其他事情,但只在你的sqs控制台管理器中:
创建一个新队列
称它为死信(或其他)
将"Maximum Receives"值设置为1(这意味着在一次调用"done(error)"之后,该消息将从队列中删除并转到死队列 .
刷新!!!!
返回源队列(原始队列)
去配置队列
设置检索策略
将您提供的名称放入死信队列
而已!祝你好运,我不得不说sqs是扩展任务的好方法 .