我一直试图找出更多关于重试和错误队列(代码失败)的信息,而不是在应用程序中进行内存中的重试。
下面是我的场景:
我正在发送一条信息,大意是:
“处理此任务的输出-它希望您用这个流的内容更新这个xml文件”。
我有将输出写入xml文件的代码,但它有时会失败,需要重新尝试,因为我的应用程序/人员的另一部分可能在那个时候使用该文件。
我想要做的是,“每当输出代码失败时,重新发送SQS消息,该消息告诉它启动输出进程/用相同的信息发送一个新的进程。因此重新尝试一条消息。”而且,一旦它重试并失败100次,我想把它移到一个错误队列中。
有人知道这方面的任何实现吗?在我开始实现之前,我正在尝试看到已经做过的事情。
发布于 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只需点击几下鼠标就能完成所有的工作--您只需编写代码,将原始消息放入第一个队列,完成工作,并在任务成功完成时从队列中删除消息。
https://stackoverflow.com/questions/30933525
复制相似问题