为订阅系统设计作业调度程序

时间:2015-10-30 08:29:19

标签: mysql node.js scheduled-tasks jobs

我必须在NodeJS项目中开发/使用调度程序来检查是否需要续订任何订阅。作业需要每天运行一次并检查我的数据库,如果当天有任何用户订阅记录的“enddate”。如果是,运行一个逻辑来更新它(我有自己的更新逻辑,不依赖于任何外部服务,如支付提供商/网关)。

应用程序将在云中,这意味着我的所有应用程序实例都必须是无状态的。数据库(MySQL)是系统中唯一的有状态部分,Renew逻辑只能运行一次。

我该怎么做?

订阅的我的数据库表行如下所示:

Id: 1, User: John Doe, Plan: Monthly Premium, Start Date: 1-10-2015, End Date: 30-10-2014, status : "ACTIVE"

问题:

1。)每天触发作业运行逻辑 - 使用setInterval或调度程序库在nodejs中轻松解决

2。)运行一个工作人员或一段代码来检查数据库并更新它 - 每个用户订阅只需要发生一次。当每日调度程序触发进程时,许多实例可能同时运行更新逻辑。不知道如何解决这部分问题。

3 个答案:

答案 0 :(得分:0)

一种可能的解决方案包括一个shell脚本,放在你的crontab中,每天运行一次。 这个脚本可以:

  • 使用sql语句或存储过程,查找订阅的记录 结束日期是今天
  • 对于这些记录,请应用您的逻辑。 (发送电子邮件或其他任何内容)
  • 标记记录以表明已完成某项操作 对于此用户(并在其他字段中输入处理日期)。

答案 1 :(得分:0)

  1. 您可以创建一名工作人员并使用node-cron每天触发订阅过期。

  2. 我不确定续订过程的作用。您可以使用锁定功能,直到续订过程完成并释放它。我以为我会用redlock

答案 2 :(得分:0)

您可以使用Agenda,但它需要MongoDb来维持其状态。如果您可以添加一个DB,那么您可以尝试一下。