我正在使用Amazon SQS实现任务队列(但我想这个问题适用于任何任务队列),其中工作人员需要采取不同的操作,具体取决于已经重新尝试作业的次数(将其移至不同的队列,增加可见性超时,发送警报..等等)
跟踪失败的工作计数的最佳方法是什么?我想避免为工作保留一个集中式数据库:重试计数记录。我应该在监控过程中查看在队列中花费的时间吗?国际海事组织最好是丑陋或不干净,重复工作直到找到古老的工作..
谢谢! 安德拉斯
答案 0 :(得分:7)
还有另一种更简单的方法。根据您的消息,您可以请求ApproximateReceiveCount信息并在此基础上建立重试逻辑。这样您就不必将其保留在数据库中,并可以从消息本身计算出来。
http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html
答案 1 :(得分:5)
我将SQS与SimpleDB结合起来取得了很大的成功。它是“集中的”,但只有SQS。
每个作业都在simpleDB中获得记录,在SQS中获得任务。您可以在SimpleDB中添加您喜欢的任何信息,例如创建作业的时间。当工作人员从队列中提取作业时,它可以从simpleDB中获取相应的记录以确定其历史记录。您可以查看作业的年龄,并且可以查看已尝试的次数。完成后,您可以将工作人员数据添加到SimpleDB记录(完成时间,结果,日志,错误,堆栈跟踪等)并确认来自SQS的消息。
我更喜欢这种方法,因为它通过为失败的任务提供大量调试信息来帮助诊断故障。它还允许工作人员以不同的方式处理工作,具体取决于工作排队的时间长短,工作失败次数等等。
它还使您能够直接查询SimpleDB并计算每个任务的平均时间,失败率百分比等等。
答案 2 :(得分:1)
亚马逊刚刚发布了简单的工作流程服务(swf),您可以将其视为GAE任务队列的更复杂/灵活的版本。
它可让您监控任务(使用听力),配置重试策略并创建复杂的工作流程。看起来很有希望抽象出任务依赖性,任务的调度和容错(特别是异步的)
结帐http://docs.amazonwebservices.com/amazonswf/latest/developerguide/swf-dg-intro-to-swf.html了解概述。
答案 3 :(得分:0)
SQS代表"简单队列服务"其中,概念是该服务的错误名称。 " Queue"的第一个也是最重要的特征。是FIFO(先进先出),SQS缺乏。只想澄清一下。
此外,Azure队列服务也缺乏这一点。要获得最佳的云队列服务,请使用Azure的服务总线,因为它是一个真正的队列概念。