【发布时间】:2020-12-31 14:53:08
【问题描述】:
我在 AWS ECS 上部署了一个用 Adonis v4.1 (node.js) 编写的后端。 在我的 API 的任务定义中,我有 Adonis 和 Redis,它们通过桥接网络链接。
我使用 adonis-scheduler 每 30 分钟运行一次 cronjob。此 cronjob 进行数据库查询,并为每一行创建一个作业(使用 adonis-queue-pro 库)。作业并发为 1(因此,如果我有 30 条记录,一次将处理一项作业)。每个作业都会进行外部 API 调用并更新数据库中的记录。
在本地主机上一切正常,但在暂存环境中有时会发生我的 API 任务有多个实例并且多个 cronjob 在同一确切时间启动。因此,我没有为每条记录工作,而是为同时运行的每条记录提供多个工作。这是个大问题。
有没有办法处理这种情况并且只执行一个实例的 cronjob? 或者也许我可以有一个任务定义,其中只有一个实例中的调度程序部分(总是),而 API 和 redis 有很多实例?
问题是我写的代码与我的后端有很深的联系,所以我不能使用像 lambda 函数或其他外部服务这样的东西。
【问题讨论】:
标签: node.js cron scheduler amazon-ecs adonis.js