6

我正在使用 node.js 和 mongodb 构建一个 Web 应用程序。我需要添加延迟的工作。例如,在注册一个月后向用户发送一封电子邮件。除了 Kue 之外,我还没有找到用于延迟作业的现有解决方案,但它使用 Redis,我更愿意在向我的 Web 应用程序添加另一个资源之前使用我现有的 Mongodb。

有没有现成的解决方案?

4

4 回答 4

8

简短的回答

简短的回答是否没有 Kue 到 MongoDB 的端口,也没有任何计划。目前没有其他流行的开源项目提供类似的功能。此外,Redis 似乎更适合这类项目。

长答案

虽然 Kue 非常有趣并且提供的不仅仅是延迟任务,但您的要求似乎非常简单。

如果您只需要在注册一个月后向用户发送一封电子邮件,或者类似的事情,它通常内置于操作系统级别。

我建议你做的,假设你有一个sendEmail方法(一般来说,你知道如何完成任务)如下:

  1. 根据操作系统,安排sendEmailHandler任务每天运行一次。在 Windows 中这是使用. "Scheduled Tasks",在 OS X、BSD 和 Linux 中,这是使用cron. (cron 教程)。大多数 PaaS 选项也有这种选项(如 nodejitsu、Azure...)。
  2. 这些任务应该是一个 node.js 脚本,它遍历一个长期运行的任务列表(即每月、每周或更长运行一次的东西)。
  3. MongoDB您选择使用的地方,保存一组任务,每个任务都有一个“开始时间”。此类任务的一个示例是特定用户在 1 个月后收到一封电子邮件。
  4. 在您的sendEmailHandler脚本中,检查哪些任务应该运行并执行,然后您应该将它们从MongoDB collection.

虽然这听起来像是一些工作,但它不应该花太长时间。这里描述的所有代码都非常简单。

如果我理解正确,Kue 可以让你做一些你不需要的事情,比如优先级、尝试、进度等。使用一个做很多事情来做一些简单事情的库可能最终会咬你一口,因为调试和维护通常更难。

祝你好运!如果您希望我详细说明特定部分,请随时告诉我。

于 2013-03-23T15:49:59.427 回答
7

另一种选择是议程

Agenda 是 Node.js 的轻量级作业调度库。

于 2015-09-02T20:17:26.220 回答
3

我只是在研究同样的事情,发现了这个 npm 包:

monq - Node.js 的 MongoDB 支持的作业队列 - https://www.npmjs.org/package/monq

于 2014-03-27T00:56:12.827 回答
0

我也在寻找这种与 MongoDB 一起使用的队列库。我刚刚找到mongodb-queue

当需要处理大量消息和持久性时, BullBeeKue等库是必不可少的。对于所有这些库,持久性都是通过 Redis 实现的。

于 2021-07-30T05:54:50.983 回答