流星的背景任务

时间:2012-07-28 17:05:23

标签: javascript meteor npm

我想知道,如果有办法实现后台任务,可能还有工作池。你能告诉我方向吗,我正在考虑为此编写包装?

4 个答案:

答案 0 :(得分:107)

2019更新

在考虑为任何东西编写包之前,首先要看一下现有的包是否能满足您的需求。在Meteor世界中,这意味着在Atmosphere上查找“作业/队列/任务/工作人员管理/日程安排”软件包,然后在npm上查找相同的搜索条件。您还需要更精确地定义您的要求:

  • 你想要持久性,还是内存解决方案有效?
  • 您希望能够将作业分发到不同的机器吗?

流星特异性

  • job-collection - 可靠(我在2014年在初创公司的生产中使用过它),但目前处于维护模式。允许您安排在任何地方运行的持久性作业(服务器,客户端)。
  • SteveJobs - 由多个powerful Meteor tools
  • 的作者Max Savin积极维护
  • littledata:synced-cron - “Meteor的一个简单的cron系统。它支持在多个进程之间同步作业。”

废弃的套餐:

Npm包

Meteor已经能够直接使用npm包几年了,所以这个问题相当于在NPM上找到job/worker/queue management packages。如果你不关心持久性:

  • Async“提供了大约70个功能,包括通常的”功能性“嫌疑人(mapreducefiltereach ...)以及异步控制流的一些常见模式(parallelserieswaterfall ......)“
  • d3-queue - 极简主义,由D3作家Mike Bostock撰写

如果你确实需要持久性,因为Meteor已经使用了MongoDB,所以使用具有持久性的作业调度包对MongoDb可能是有利的。最强大和最受欢迎的似乎是Agenda,但不幸的是它几个月没有得到维护,并且积压了issues

如果您愿意将redis支持的依赖项添加到项目中,还有更多选择:

与MongoDB一样,Redis也可以提供高可用性(通过Redis Sentinel),如果要在多台工作机器之间分配作业,可以point them all at the same Redis server

答案 1 :(得分:2)

有一个基于Cron作业的包,可用于在某些时间间隔或日期安排任务。这是一个包:https://atmosphere.meteor.com/package/cron

如果您碰巧查看该软件包的来源,您会发现他们只是在使用:

Meteor.setInterval( ... , delay );

因此,如果您将任务保存在数据库中,然后在启动期间将它们加载到间隔中,那么您可能会走上正确的轨道。

答案 2 :(得分:2)

如果您正在寻找Meteor特有的东西,我很高兴地分享一个名为Steve Jobs的新软件包。它使运行后台作业就像调用方法一样简单。

它具有您期望的所有标准功能,例如仅运行一次作业,重试失败的作业等等。您可以在GitHub上了解更多信息:

http://github.com/msavin/stevejobs

答案 3 :(得分:0)

我猜他们的路线图上有适当的支持,但与此同时,我已经设法通过setInterval以一种黑客的方式进行。请参阅cron-tick包。