我想知道,有没有办法实现后台任务,也许是工作人员池。你能告诉我方向吗,我正在考虑为此编写包?
Meteor 中的后台任务
2019年更新
在考虑为任何东西编写包之前,首先看看是否有现有的包可以满足您的需求。在 Meteor 世界中,这意味着在 Atmosphere 上查找“作业/队列/任务/工人管理/调度”包,然后在 npm 上查找相同的搜索词。您还需要更精确地定义您的要求:
- 你想要持久性,还是内存中的解决方案有效?
- 您是否希望能够将作业分配到不同的机器?
流星专用
- 作业收集- 可靠(我在 2014 年在启动时在生产中使用它),但目前处于维护模式。让您安排持久作业在任何地方(服务器、客户端)运行。
- SteveJobs - 由 Max Savin 积极维护,他是几个强大的 Meteor 工具的作者
- littledata:synced-cron - “流星的一个简单的 cron 系统。它支持在多个进程之间同步作业。”
废弃的包裹:
- artwells:queue - 优先级、调度、日志记录、重新排队。由 MongoDB 支持的队列。最后一次代码提交:2015-10 月。
- 超级基本的 cron 包:easycron。最后更新:2015 年 12 月。
- 差异:工人- 产生无头工作流星进程以处理异步作业。最后一次代码提交:2015 年 1 月
- cron(自 2015 年起)
- PowerQueue -自 2014年起放弃。队列异步任务,限制资源使用,重试失败。支持子队列。没有调度。没有测试,但漂亮的演示。由于使用递归调用,不适合长时间运行。
npm 包
Meteor 已经能够直接使用 npm 包好几年了,所以这个问题相当于在 NPM 上查找作业/工人/队列管理包。如果你不在乎持久性:
- 异步“提供了大约 70 个函数,其中包括通常的‘功能性’可疑对象 (
map
,reduce
,filter
,each
...) 以及异步控制流的一些常见模式 (parallel
,series
,waterfall
...)” - d3-queue - 简约,由 D3 作者 Mike Bostock 编写
如果您确实想要持久性,因为 Meteor 已经使用了 MongoDB,使用具有持久性的作业调度包可能对 MongoDb 有利。最强大和最流行的似乎是Agenda,但不幸的是它几个月没有维护,并且它有大量积压的问题。
如果您愿意在项目中添加由redis支持的依赖项,还有更多选择:
和 MongoDB 一样,Redis 也可以提供高可用性(通过 Redis Sentinel),如果你想在多台工作机器之间分配作业,你可以将它们都指向同一个 Redis 服务器。
有一个基于 Cron 作业的包,可用于在特定时间间隔或日期安排任务。这是包:https : //atmosphere.meteor.com/package/cron
如果您碰巧查看该包的来源,您会注意到它们只是在使用:
Meteor.setInterval( ... , delay );
因此,如果您将任务保存在数据库中,然后在启动期间将它们加载到间隔中,那么您可能会走上正确的轨道。
如果您正在寻找特定于 Meteor 的东西,我很高兴与大家分享一个名为 Steve Jobs 的新软件包。它使运行后台作业就像调用方法一样简单。
它具有您期望的所有标准功能,例如仅运行一次作业、重试失败的作业等。您可以在 GitHub 上了解更多信息:
我猜他们的路线图上有适当的支持,但与此同时,我已经设法通过setInterval
. 查看cron-tick包。