【发布时间】:2014-11-27 20:42:28
【问题描述】:
我正在设计一个需要处理作业队列的应用程序,可以由任何工作服务器处理。作业存储在数据库中,并且类型不同。我有一个设计想法,概述如下:
每个作业都实现一个IJob,子类型包含运行作业所需的所有属性。 Worker 将从数据库中拉出列表中的下一个作业,并开始处理它,并定期将进度记录回数据库。
需要定期将作业添加到此队列中,可能是每 5 秒、10 秒、30 秒、1 分钟、5 分钟、10 分钟、1 小时...... 1 年、2 年(你明白了)。所以我需要某种形式的 Cron 作业来触发这些事件。例如,一个工作可能是每小时从某个邮箱下载和处理电子邮件附件。
我理想的解决方案是一种模式,它允许工人被复制并在没有冲突的情况下工作,同时也不担心填充这些工作的 1 个“主工人”。
我目前的设计涉及一个单独的数据库表来跟踪哪些“定期”作业已完成,并且每个工作人员每秒都会对该表进行原子更新。如果一个周期性的工作需要创建并且还没有完成,worker 将创建它。每个工作程序将由一个 windows 任务触发,设置为每秒运行一次。
我相信这应该一切正常,但是我认为这是一个普遍的要求,必须有已知的模式或工具,我不想重新发明轮子。
所以问题:
- 我是在重新发明轮子吗?!
- 我使用的模式是否合理,或者可以改进吗?
- 是否有任何第三方库可以为 .NET 执行此操作?
当前堆栈是在 Windows 服务器 (AWS EC2) 上运行的 .NET / C#,带有 MongoDB 后端。
【问题讨论】:
标签: c# .net mongodb queue jobs