对于与MongoDB而不是Redis一起使用的Kue有什么好的替代方案?

时间:2013-03-23 14:52:24

标签: node.js mongodb task-queue kue

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

有没有现成的解决方案?

4 个答案:

答案 0 :(得分:7)

另一个选项是Agenda

  

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

答案 1 :(得分:6)

简短回答

简短的回答是。到MongoDB没有Kue的端口,也没有任何计划。目前还没有其他开源的热门项目提供类似的功能。而且Redis似乎更适合这种类型的项目。

答案很长

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

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

我建议你做什么,假设你有sendEmail方法(一般来说,你弄明白了如何完成任务)如下:

  1. 根据操作系统,安排sendEmailHandler每天运行一次的任务。在Windows中,这是使用"Scheduled Tasks"完成的,在OS X,BSD和Linux中,这是使用cron完成的。 (cron tutorial | ST tutorial)。大多数PaaS选项也有这种选择(如nodejitsu,Azure ......)。
  2. 该任务应该是一个node.js脚本,它遍历一系列长时间运行的任务(即每月,每周或更长时间运行一次的内容)。
  3. 在您选择使用的MongoDB中,保留一组任务,每个任务都有一个“开始时间”。此类任务的一个示例是特定用户在1个月后收到电子邮件。
  4. sendEmailHandler脚本中,检查应运行哪些任务并执行它们,之后应将其从MongoDB collection中删除。
  5. 虽然这听起来像是一些工作,但它不应该花太长时间。这里描述的所有代码都非常简单。

    如果我理解正确的话,Kue会让你做一些你不需要的优先事项,尝试,进步等等。使用可以执行许多操作的库来执行简单的操作可能最终会让您感到困惑,因为通常会更难以进行操作和维护。

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

答案 2 :(得分:3)

我正在研究同样的事情并找到了这个npm包:

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

答案 3 :(得分:0)

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

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