工作队列失败的工作队列

时间:2014-03-25 21:11:23

标签: c# .net asynchronous task-queue

我有一个WCF服务(事实上它的WCF不重要)而且我不是在寻找消息队列,而是寻找一个用于放置任务的异步工作队列,一旦收到请求/消息。要求:

  • 必须支持持久存储,以便在服务器/服务进程失败的情况下恢复任务。
  • 支持重新运行失败的作业,达到给定的限制(即尝试重新运行作业最多5次)
  • 能够以容易查询的方式记录失败的作业调用及其参数。例如,我会查询商店是否有失败的工作,并收到一份"工作名称,参数"的列表。
  • 不幸的是,它不能是基于云的/托管解决方案。

我可能不会寻找的队列:

  • MSMQ(RabbitMQ,AMQP)。低级别,专注于邮件传输。
  • Quartz.NET。有一些上述但其错误记录设施缺乏。与异步工作和错误报告相比,更倾向于类似于cron的调度。
  • .NET TPL的默认任务计划程序。它没有持久的过程,拥有它突然停止,并不能很好地支持重新运行任务。

我认为我正在寻找更多类似Celery,Resque甚至qless的东西。我知道Resque.NET存在(https://www.nuget.org/packages/Resque/),但不确定是否有更主流的东西,或者这是否足够。

1 个答案:

答案 0 :(得分:0)

Amazon SQS怎么样?您不必像使用RabbitMQ / MSMQ那样担心基础设施问题。 SQS也很便宜。我上次检查时,每10,000封邮件的价格为0.01美元。为什么重新发明轮子?让亚马逊(或其他具有类似服务的云提供商,如微软和Rackspace)一切都令人担忧。

我在生产中使用Amazon SQS来处理所有基于消息的服务。其中一些消息就像chron的工作;外部进程在特定时间对消息进行排队。其中一些人立即采取行动。