题
我想知道是否有办法实现后台任务,也许可以使用工作池。你能给我指明方向吗,我正在考虑为此编写软件包?
解决方案
2019年更新
在考虑为任何内容编写包之前,首先查看是否有现有的包可以满足您的需要。在 Meteor 世界中,这意味着在 Atmosphere 中查找“作业/队列/任务/工作人员管理/调度”包,然后在 npm 上查找相同的搜索词。您还需要更准确地定义您的需求:
- 您想要持久性,还是内存中的解决方案有效?
- 您希望能够将作业分配给不同的机器吗?
流星专用
- 工作收集 - 可靠(我在 2014 年初创公司的生产中使用过它),但目前处于维护模式。允许您安排在任何地方(服务器、客户端)运行的持久作业。
- 史蒂夫·乔布斯 - 由 Max Savin 积极维护,他是几部作品的作者 强大的 Meteor 工具
- Littledata:synced-cron - “Meteor 的一个简单的 cron 系统。它支持在多个进程之间同步作业。”
废弃的包裹:
- 艺术井:队列 - 优先级、调度、记录、重新排队。由 MongoDB 支持的队列。最后的 代码提交: :2015年-10月
- 超级基本的 cron 软件包: 易克朗. 。最后更新:2015 年 12 月。
- 差别:工人 - 生成无头工作流流星进程来处理异步作业。最后的 代码提交: :2015年1月
- 计划任务 (自2015年起)
- 电源队列 - 被遗弃 自2014年起. 。排队异步任务、限制资源使用、重试失败。支持子队列。 无日程安排. 。没有测试,但是 漂亮的演示. 。由于使用不适合长时间跑步 递归调用.
Npm 包
Meteor 已经能够直接使用 npm 包好几年了,所以这个问题相当于寻找 作业/工人/队列管理包 在 NPM 上。如果你不关心持久性:
- 异步 “提供大约 70 种功能,其中包括常见的‘功能’嫌疑(
map
,reduce
,filter
,each
...)以及异步控制流的一些常见模式(parallel
,series
,waterfall
...)" - d3 队列 - 简约,由 D3 作者 Mike Bostock 撰写
如果您确实需要持久性,由于 Meteor 已经使用 MongoDB,因此使用具有 MongoDb 持久性的作业调度包可能会更有利。最强大和最受欢迎的似乎是 议程, ,但不幸的是它已经好几个月没有维护了,并且积压了大量 问题.
如果您愿意添加由以下支持的依赖项 雷迪斯 对您的项目来说,还有更多的选择:
- 公牛 - 功能最齐全的 Node 作业队列解决方案,由 Redis 支持
- 蜜蜂 - 简单、快速、稳健。不患有 Bull 表现出的内存泄漏
- 奎 - Node 的优先作业队列
和 MongoDB 一样,Redis 也可以提供高可用性(通过 Redis Sentinel),如果你想在多台工作机之间分配作业,你可以 将它们全部指向同一个 Redis 服务器.
其他提示
基于Cron作业存在包,可用于在某些间隔或日期上安排任务。以下是包: https://atmosphere.meteor.com/package/cron
如果您碰巧查看该软件包的来源,您将注意到他们只是使用:
Meteor.setInterval( ... , delay );
因此,如果您在数据库中保存任务,请在启动期间将它们加载到间隔,然后您可能在正确的轨道上。
如果您正在寻找特定于流星的东西,我很乐意分享有一个名为史蒂夫乔布斯的新包。它使运行后台作业简单地调用方法。
它具有您预期的所有标准功能,例如运行一次作业,重试失败的作业,等等。您可以在github上了解有关它的更多信息:
我猜恰当的支持是在他们的路线图上,但与此同时,我设法通过世代odicetagcode以忏悔方式。查看 cron-tick 包。