【问题标题】:Queue, Jobs and Scheduler - Existing Patterns or Libraries?队列、作业和调度程序 - 现有模式或库?
【发布时间】: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


    【解决方案1】:

    Quartz.NET 似乎符合“T”的大部分标准。包括有一个叫做IJob的东西;)。

    结合使用 RabbitMQ 或模拟队列的自定义数据库表,您现在可以定期处理排队输入的作业。

    话虽如此,如果您希望它是分布式的(即有多个服务器运行这些作业),您将需要一个普通 Quartz.NET 发行版中的 SQL 数据库。似乎有可用的 MongoDB 适配器,虽然我从未使用过。

    【讨论】:

    • 石英是完美的。非常快速且易于使用,使用 MongoDb JobStore 运行它没问题。为我节省了无数小时!谢谢
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多