59

我想知道,有没有办法实现背景任务,也许是工人池。你能告诉我方向吗,我正在考虑为此写包?

4

4 回答 4

108

2019 年更新

在考虑为任何东西编写一个包之前,首先看看是否有现有的包可以满足你的需要。在 Meteor 世界中,这意味着在 Atmosphere 上查找“工作/队列/任务/工人管理/调度”包,然后在 npm 上查找相同的搜索词。您还需要更准确地定义您的要求:

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

流星专用

废弃的包裹:

Npm 包

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

  • Async “提供了大约 70 个函数,其中包括通常的‘功能性’嫌疑人(map, reduce, filter, each...)以及一些常见的异步控制流模式(parallel, series, waterfall...)”
  • d3-queue - 极简主义,由 D3 作者 Mike Bostock 编写

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

如果你愿意为你的项目添加一个由redis支持的依赖,还有更多的选择:

和 MongoDB 一样,Redis 也可以提供高可用性(通过 Redis Sentinel),如果你想在多个工作机器之间分配作业,你可以将它们都指向同一个 Redis 服务器

于 2014-01-25T14:45:05.433 回答
2

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

如果您碰巧查看了该软件包的来源,您会注意到它们只是在使用:

Meteor.setInterval( ... , delay );

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

于 2013-07-17T21:10:21.143 回答
2

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

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

http://github.com/msavin/stevejobs

于 2017-10-27T12:14:18.783 回答
0

我猜他们的路线图上有适当的支持,但与此同时,我设法通过setInterval. 请参阅cron-tick包。

于 2012-07-29T07:38:32.620 回答