gpt4 book ai didi

node.js - 在 nodejs 中创建重复事件以更新或插入 MySQL 表

转载 作者:搜寻专家 更新时间:2023-10-31 23:56:49 24 4
gpt4 key购买 nike

我有一个 MySQL 表任务。在任务中,我们可以创建一个普通任务或一个循环任务,它会自动在 MySQL 的 tasks 表中创建一个新任务,并向用户发送一个任务已创建的电子邮件通知。经过大量研究,我发现您可以通过四种方法做到这一点

  1. MySQL 事件
  2. Kue, bull, agenda(node.js 调度库)
  3. 使用 cron 作业来监控每天的任务

重复性任务将在每周每天每月每年 重复。我们必须设置一个选项以随时删除重复发生的事件。什么是好的和干净的解决方案?

最佳答案

正如您所确定的,有多种方法可以解决此问题,以下是我的做法,但我做了一些假设,例如您可能有多少任务以及系统的灵 active 正在前进。

如果您不太可能更改任务时间选项(每天、每周、每月、每年)。每个任务都有以下字段 last_run_datenext_run_date。每次运行任务时,我都会更新这些字段并在日志表中创建一个条目,例如 task_run_log,它还将存储任务运行的日期/时间。

然后我会有一个 cron 作业,它会向 nodejs 服务发送 HTTP 消息。该 Web 服务将查看任务表,找出当天需要执行的任务,并将每个任务的消息发送到某种队列(AWS SQS、GCP Pub/Sub、Apache Kafka 等)。队列中的每条消息都代表一个需要执行的任务,工作人员可以订阅这个队列并自己处理任务。一旦工作人员处理了一项工作,它就会创建日志条目并更新 last_run_datenext_run_date 字段。如果任务失败,它会将其添加到将该消息移动到错误队列中,并将失败的任务记录在任务日志中。

这个系统将是健壮的,因为任何失败的作业都会作为失败的作业存在于您的数据库中,并且会出现在错误队列中(您可以排空以删除失败的作业,或者您可以在正常队列中重放它们 worker 是固定的)。它还可以扩展到每天必须完成的许多任务,因为您可以扩展您的员工。您也不会淹没 cron,您的 cron 作业每天只会向您的 HTTP 服务发送一个 HTTP 请求,从而开始处理。

您还可以根据 cron 作业是否运行来设置警报,以确保进程正确启动。

关于node.js - 在 nodejs 中创建重复事件以更新或插入 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com