我尝试过使用npm软件包,例如sqs-queue-parallel& sqs-consumer用于消耗节点
中SQS的消息但是最近我有机制,当处理时特定消息发生错误时,它应该被移动到死信队列
但截至目前,它一直按最大接收计数次数重试消息
是否可以使用其他一些npm包,只要发生错误,它应该直接移动到死信队列?
答案 0 :(得分:3)
您可以配置SQS队列,以便在任意数量的失败邮件收到1到1000之后将邮件移动到死信队列。
要在收到一次失败后将消息移至Dead Letter Queue,然后修改队列的配置并将“Maximum Receives”值设置为1.这将是队列“Redrive Policy”的一部分。
请参阅以下有关配置队列的AWS文档: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html
答案 1 :(得分:2)
知道这有点晚了但是认为OP正试图要求动态政策。即:
如果被问到什么,如何做后者。
答案可能是手动将消息复制到deadletter queue(它的行为与此方面的任何其他队列一样),然后从源队列中删除消息。
不要相信那里有一个特殊的'这样做的方法。
答案 2 :(得分:0)
您不需要使用新的npm,因为当您完成处理消息时它会自动发生。例如,如果您在完成消息后使用了node-consumer,那么:
class Login:
user = None
password = None
@classmethod
def set_or_get(cls, *args):
if args:
cls.user, cls.password = args
return cls
else:
return cls.user, cls.password
login_details_a = Login.set_or_get('a', 'b')
login_details_b = Login()
print(login_details_a.set_or_get())
>> ('a', 'b')
print(login_details_b.set_or_get())
>> ('a', 'b')
login_details_b.set_or_get('c', 'd')
print(login_details_a.set_or_get())
>> ('c', 'd')
print(login_details_b.set_or_get())
>> ('c', 'd')
或
CookieContainer gaCookies = new CookieContainer();
Uri target = new Uri("http://www.google.com/");
gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });
所以现在为了将消息从队列移动到死信队列,您不需要在代码中执行任何其他操作,只能在sqs控制台管理器中执行:
答案 3 :(得分:0)
我认为OP正在询问是否有办法在处理消息“单次失败”之后将消息移至DLQ。根据这2个SQS文档,我看到以下2点:
这意味着即使将“最大接收值”设置为1,您的消费者仍会收到消息“至少两次”
我找不到任何解决方案,您可以在一次失败后将失败的消息移至DLQ。很想听听其他人对此的想法