我想知道,如果有办法实现后台任务,可能还有工作池。你能告诉我方向吗,我正在考虑为此编写包装?
答案 0 :(得分:107)
在考虑为任何东西编写包之前,首先要看一下现有的包是否能满足您的需求。在Meteor世界中,这意味着在Atmosphere上查找“作业/队列/任务/工作人员管理/日程安排”软件包,然后在npm上查找相同的搜索条件。您还需要更精确地定义您的要求:
废弃的套餐:
Meteor已经能够直接使用npm包几年了,所以这个问题相当于在NPM上找到job/worker/queue management packages。如果你不关心持久性:
map
,reduce
,filter
,each
...)以及异步控制流的一些常见模式(parallel
,series
,waterfall
......)“如果你确实需要持久性,因为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上了解更多信息:
答案 3 :(得分:0)
我猜他们的路线图上有适当的支持,但与此同时,我已经设法通过setInterval
以一种黑客的方式进行。请参阅cron-tick包。