【问题标题】:How to architect job scheduler如何构建作业调度程序
【发布时间】:2023-01-20 05:14:57
【问题描述】:

我正在构建一个作业调度程序,但我陷入了两种方法之间。我有两种类型的工作,一种是安排在特定日期,另一种是每小时运行一次。对于特定的日期,我轮询存储作业的数据库表并将结果发布到特定工作人员处理它们的 rabbitmq 消息代理。这适用于更明确的任务,例如发送提醒通知或电子邮件。对于每小时的作业,我有一个基于 cron 表达式的作业在运行,并且直接在函数中有逻辑,所以它不会进入队列。通常,这些工作是清理我的数据库或根据前一天的活动设置某些值等。

我想知道构建它的最佳方法是什么。让所有这些较小的作业作为微服务按节奏运行并在队列中监听是否有意义?我应该将它们全部组合成一项服务吗?我是否应该将这两种类型的所有逻辑合并到一个大型工作应用程序中?

【问题讨论】:

    标签: cron architecture rabbitmq nestjs microservices


    【解决方案1】:

    在我看来,正如所描述的,你有两个不同的系统在做两件不同的事情,这是一个问题。

    例如考虑发送电子邮件。使用您现在的设计,您必须编写两次电子邮件代码——一次用于发送到队列的消息,一次用于从 cron 发送的消息。

    理想情况下,您希望在设计中尽可能轻松地支持系统。例如,如果您的设计使用队列,那么所有操作都应该以相同的方式工作——从队列中获取命令消息和参数并执行它们。您的 cron 作业和调度程序都会将消息添加到队列中。支持一个新动作只意味着编码一次,然后两个系统都可以向队列中添加一条消息。

    您的数据模型也应该如此。数据模型应支持两种类型的计划,但应尽可能共享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多