Meteor 中的后台任务

IT技术 javascript meteor npm
2021-03-08 03:54:44

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

4个回答

2019年更新

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

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

流星专用

  • 作业收集- 可靠(我在 2014 年在启动时在生产中使用它),但目前处于维护模式。让您安排持久作业在任何地方(服务器、客户端)运行。
  • SteveJobs - 由 Max Savin 积极维护,他是几个强大的 Meteor 工具的作者
  • littledata:synced-cron - “流星的一个简单的 cron 系统。它支持在多个进程之间同步作业。”

废弃的包裹:

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 服务器

感谢分享如此完整的清单!
2021-04-18 03:54:44
这个看起来很受欢迎:大气js.com/percolatestudio/synced-cron
2021-04-23 03:54:44
@DanDascalescu 我还没有对这个做一个完整的写 - 但你可以使用 celeryproject.org(基于 Python 和 RabbitMQ 的分布式任务队列) - 我们目前正在使用一个流星包 -大气js.com/3stack /celery(另请参阅大气js.com/3stack/celery-connect以获取更简单的设置)
2021-04-26 03:54:44
这是一个非凡的列表,感谢您保持最新状态,这是一项真正的服务。
2021-05-01 03:54:44
这个包接缝很有趣:大气js.com/differential/workers我还没有尝试,但我想提一下它以增加选项列表
2021-05-05 03:54:44

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

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

Meteor.setInterval( ... , delay );

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

并且 cron 包中的那些调用很有可能并且应该更改为 Meteor.setTimeout() 调用。
2021-05-01 03:54:44
唯一的问题是这些间隔会在每台服务器上运行。我的新软件包 Steve Jobs 负责解决这个问题和其他问题。github.com/msavin/...
2021-05-03 03:54:44

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

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

http://github.com/msavin/stevejobs

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