.net - 在我的代码使用 AWS SQS 失败时重试消息

标签 .net amazon-web-services queue amazon-sqs

我一直在努力寻找有关 的更多信息重试和错误队列 我的代码失败而不是在我的应用程序中进行内存重试。
这是我的场景:
我正在发送一条消息,内容大致如下:
“处理此任务的输出 - 它希望您使用此流的内容更新此 xml 文件”。
我有将输出写入 xml 文件的代码,但它可以 偶尔会失败,需要重试 因为当时我的应用程序/人员的另一部分可能正在使用该文件。
我想要做的是说“每当输出代码失败时, 重新发送 SQS 消息,告诉它开始输出过程/发送一个具有相同信息的新消息 。因此重试消息。”此外,一旦它重试并失败 100 次,我想将其移至错误队列。
有谁知道这种实现的任何形式?我试图在开始实现之前看到一些已经完成的事情。

最佳答案

SQS 已经做了你想要的一切,无需太多努力:

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

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

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

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

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

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

再简单不过了 - SQS 只需点击几下鼠标即可为您完成所有工作 - 您需要做的就是编写代码,将原始消息放入第一个队列中,完成工作,然后从队列中删除消息如果/当任务成功完成时排队..

关于.net - 在我的代码使用 AWS SQS 失败时重试消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933525/

相关文章:

c# - 添加对 dll 的引用与在 .NET Standard 项目中添加 NuGet 包

c# - NHibernate:如何将查询与 anD 条件结合起来?

amazon-web-services - 如何创建 Athena 堆栈并使用 Glue 数据目录?

amazon-web-services - Certbot 更新错误 - AWS EC2

c++ - 队列、前端和后端未在范围内声明

Java队列和多维数组

c# - 为什么 AppDomain.GetLifetimeService 返回 null?

c# - 使用 LINQ to SQL 左连接

postgresql - AWS : How To Setup Postgres Security on EC2

java - 如果互联网不可用,Android 是否会请求队列服务器?