我想知道,是否有办法实现后台任务,也许可以使用工作池。你能告诉我方向吗,我正在考虑为此编写程序包?
最佳答案
2019年更新
在考虑为任何东西写一个包之前,首先看看是否有现有的包可以满足您的需要。在 Meteor 世界中,这意味着在 Atmosphere 上寻找“工作/队列/任务/ worker 管理/调度”包,然后在 npm 上寻找相同的搜索词。您还需要更准确地定义您的要求:
- 您想要持久性,还是内存解决方案可行?
- 您希望能够将作业分配到不同的机器吗?
meteor 特有
- job-collection - 可靠(我在 2014 年的一家初创公司的生产中使用过它),但目前处于维护模式。允许您安排持久作业在任何地方(服务器、客户端)运行。
- SteveJobs - 由 Max Savin 积极维护,他是几个 powerful Meteor tools 的作者
- littledata:synced-cron - “一个简单的 Meteor cron 系统。它支持在多个进程之间同步作业。”
废弃的包裹:
- artwells:queue - 优先级、调度、日志记录、重新排队。由 MongoDB 支持的队列。最后 code commit : 2015 年 10 月。
- super 基本的 cron 包:easycron .最后更新时间:2015 年 12 月。
- differential:workers - 生成 headless 工作 meteor 进程以处理异步作业。最后 code commit : 2015 年 1 月
- cron ( since 2015 )
- PowerQueue - 废弃since 2014 .排队异步任务,限制资源使用,重试失败。支持子队列。 No scheduling .没有测试,但是 nifty demo .使用不适合长时间运行recursive calls .
Npm 包
Meteor 已经能够直接使用 npm 包好几年了,所以这个问题相当于寻找 job/worker/queue management packages在 NPM 上。如果您不关心持久性:
- Async “提供了大约 70 个函数,其中包括常见的‘功能性’嫌疑对象(
map
、reduce
、filter
、each
。 ..) 以及异步控制流的一些常见模式(parallel
、series
、waterfall
...)” - d3-queue - 简约,由 D3 作者 Mike Bostock 编写
如果您确实需要持久性,因为 Meteor 已经使用 MongoDB,使用具有持久性的作业调度包到 MongoDb 可能是有利的。最强大和最受欢迎的似乎是Agenda , 但不幸的是它已经几个月没有维护了,它有大量的积压 issues .
如果您愿意添加由 redis 支持的依赖项给你的项目,有更多的选择:
- bull - 功能最全的 Node 作业队列解决方案,由 Redis 支持
- bee - 简单、快速、健壮。不会遭受 memory leak that Bull exhibits
- Kue - 节点的优先作业队列
和MongoDB一样,Redis也可以提供高可用性(通过Redis Sentinel),如果你想在多台worker机器之间分配作业,你可以point them all at the same Redis server .
关于javascript - Meteor 中的后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703010/