javascript - 分布式任务调度,作业队列

标签 javascript mysql node.js amazon-ec2 cron

我必须每 6 小时通过电子邮件发送一个特定的任务通知,该通知需要发送给需要它的用户。因此,我使用 node-cron 在我的服务器上安排了一项工作,该工作每 30 分钟唤醒一次,以检查是否有任何用户没有回复他们的电子邮件,使用带有 updated_at col 的 mysql 数据库进行跟踪。工作正常!

但现在我必须让它在分布式环境中工作。将 Elastic Beanstalk 与 1-4 个微型 ec2 实例结合使用。除了我拥有的 (MySQL),我不想添加任何其他数据库/存储/队列。

  • 有人可以列出结合 node-cron 执行此操作的步骤吗? (确保某个任务执行一次,我不想在 6 小时之前发送通知)
  • 或者我们是否有其他一些库可以在 mysql 中执行此操作以确保任务只完成一次
  • 当我的服务器或数据库负载不紧张时,我可以在 30 分钟内完成任务。
  • 有没有一种方法可以不使用数据库(和多个实例)来做到这一点,因为每 30 分钟安排一次工作就可以了!

补充一下,我的api server和worker是一样的。

最佳答案

我遇到过这个用 Python 开发的解决方案:Celery

"Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well."

  1. 可以与多个 Python 框架(Django、Pylons 等)集成: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#framework-integration

  2. 但您更喜欢 Node.js,因此您也可以将它与其他语言一起使用,它可以通过 HTTP 回调(Webhooks)集成: http://docs.celeryproject.org/en/latest/userguide/remote-tasks.html

关于javascript - 分布式任务调度,作业队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843483/

相关文章:

android - Android 平板电脑上的 Node.js 开发

javascript - 平均堆栈 Facebook 授权错误 : No 'Access-Control-Allow-Origin' header?

javascript - 使用函数删除输入数据

java - MySQL Connector/J 中的 ClassNotFoundException

mysql - 如何选取一天中每小时的最新记录

node.js - 本地主机、[::1] 和 etc/hosts 中的映射主机可以工作,但 127.0.0.1 不能

javascript - 在跨度的 onclick 事件提交表单时,如何避免浏览器发出确认消息?

javascript - 字符串与键的真实性

Javascript:获取浏览器选择的麦克风名称

mysql - 使用 MySQL 更新 csv 字段中的行