使用AWS SQS重试我的代码失败的消息

Mic*_*ark 6 .net queue amazon-sqs amazon-web-services

我一直在尝试找到有关我的代码失败的重试和错误队列的更多信息,而不是在我的应用程序中进行内存重试.

这是我的情景:

我发来的消息说的是:

"处理此任务的输出 - 它希望您使用此流的内容更新此xml文件".

我有代码将输出写入xml文件,但它偶尔会失败并需要重试,因为我的应用程序/人员的另一部分可能正在使用该文件.

我要做的是说"每当输出代码失败时,重新发送SQS消息,告诉它启动输出过程/发送一个具有相同信息的新消息.因此重试消息." 此外,一旦重试并失败100次,我想将其移动到错误队列.

有谁知道这种实施方式?在我开始实施之前,我正试图看到已经完成的事情.

E.J*_*nan 7

SQS确实已经完成了你想要的,没有太多努力:

您的代码应该将消息放入队列中,该队列显示"处理此任务的输出 - 它希望您使用此流的内容更新此xml文件"

您的工作人员任务轮询队列并获取消息并开始工作.我喜欢使用Windows服务,但chron作业或计划任务也可以.

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

如果工作人员没有完成,因此消息仍在队列中,那么在可见性超时到期后,消息将再次进入队列(或者更准确地再次在队列中可见) - 您不需要将它放回队列中.

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

您告诉它,如果一个工作人员任务已请求该消息100次(可配置1到1000次)并且未成功处理它,则自动将消息移动到指定的死信队列.

简而言之 - 只需点击几下鼠标,SQS就可以为您完成所有工作 - 您需要做的就是编写将原始消息放入第一个队列,完成工作并从中删除消息的代码.如果/当任务成功完成时队列

  • 如果由于网络或节流错误导致发送消息的请求失败怎么办?SQS客户端是否再次尝试发送消息?如何配置这些参数? (3认同)