首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重试我的代码在AWS SQS中失败的消息

重试我的代码在AWS SQS中失败的消息
EN

Stack Overflow用户
提问于 2015-06-19 08:30:12
回答 1查看 7K关注 0票数 7

我一直试图找出更多关于重试和错误队列(代码失败)的信息,而不是在应用程序中进行内存中的重试。

下面是我的场景:

我正在发送一条信息,大意是:

“处理此任务的输出-它希望您用这个流的内容更新这个xml文件”。

我有将输出写入xml文件的代码,但它有时会失败,需要重新尝试,因为我的应用程序/人员的另一部分可能在那个时候使用该文件。

我想要做的是,“每当输出代码失败时,重新发送SQS消息,该消息告诉它启动输出进程/用相同的信息发送一个新的进程。因此重新尝试一条消息。”而且,一旦它重试并失败100次,我想把它移到一个错误队列中。

有人知道这方面的任何实现吗?在我开始实现之前,我正在尝试看到已经做过的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 09:03:34

SQS已经做了您想做的任何事情,无需付出太多的努力:

您的代码应该将消息放到队列中,该队列中写着“处理此任务的输出-它希望您用该流的内容更新这个xml文件”

工作任务轮询队列并获取消息并开始工作。我喜欢为此使用windows服务,但chron作业或计划任务也能工作。

只有当工作人员成功完成任务时,它才会从队列中删除消息--这是工人作业在退出前应该做的最后一件事。当得到消息时,它不会从队列中删除消息,只有在成功处理消息时,它才会删除消息。

如果工作人员没有完成,因此消息仍然在队列中,那么在可见超时过期后,消息将再次自动出现在队列中(或者更准确地说,在队列中再次可见)--您不需要将它重新放到队列中。

要实现“100次尝试后失败”,您需要设置一个“死信队列”:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html

您告诉它,如果工作任务请求该消息100次(可配置,从1次到1000次),但没有成功地处理该消息,则自动将消息移动到指定的死信队列中。

再简单不过了-- SQS只需点击几下鼠标就能完成所有的工作--您只需编写代码,将原始消息放入第一个队列,完成工作,并在任务成功完成时从队列中删除消息。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30933525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档