web-dev-qa-db-ja.com

Meteorのバックグラウンドタスク

私は、おそらくワーカープールを使用してバックグラウンドタスクを実装する方法があるのだろうかと思っています。方向性を教えてもらえますか、このためのパッケージを書くことを考えていますか?

58
Leonid Bugaev

2019年更新

何かのためにパッケージを書くことを考える前に、まずあなたが必要なことをする既存のパッケージがあるかどうか見てください。 Meteorの世界では、これはAtmosphereで「ジョブ/キュー/タスク/ワーカー管理/スケジューリング」パッケージを探し、次に同じ検索語でnpmを探すことを意味します。また、要件をより正確に定義する必要があります。

  • 永続性が必要ですか、またはメモリ内ソリューションが機能しますか?
  • 別のマシンにジョブを分散できるようにしたいですか?

流星固有

  • job-collection -信頼性(2014年に本番環境のスタートアップで使用しました)が、現在はメンテナンスモードです。永続ジョブをどこでも実行できるようにスケジュールできます(サーバー、クライアント)。
  • SteveJobs -いくつかの作者であるMax Savinが積極的に管理 強力なMeteorツール
  • littledata:synced-cron -「Meteor用のシンプルなcronシステム。複数のプロセス間でのジョブの同期をサポートします。」

放棄されたパッケージ:

Npmパッケージ

Meteorは数年前からnpmパッケージを直接使用できるため、この質問はNPMで job/worker/queue management packages を見つけることになります。永続性を気にしない場合:

  • Async "通常の「機能的な」容疑者(mapreducefiltereachを含む約70個の関数を提供します。 ..)および非同期制御フローの一般的なパターン(parallelserieswaterfall...) "
  • d3-queue -D3作者Mike Bostockによって書かれた最小限の

永続性が必要な場合、MeteorはすでにMongoDBを使用しているため、MongoDbに対する永続性を備えたジョブスケジューリングパッケージを使用すると有利な場合があります。最も強力で人気のあるものは Agenda のようですが、残念ながら数か月間維持されておらず、 issues のかなりのバックログがあります。

redis によって裏付けられた依存関係をプロジェクトに追加する場合は、さらに選択肢があります。

  • bull -Redisが支援するNodeの最もフル機能のジョブキューソリューション
  • bee -シンプル、高速、堅牢。 Bullが示すメモリリーク の影響を受けない
  • Kue -ノードの優先ジョブキュー

MongoDBと同様に、Redisは(Redis Sentinelを介して)高可用性を提供することもできます。複数のワーカーマシン間でジョブを分散する場合は、 同じRedisサーバーですべてをポイントする を使用できます。

107
Dan Dascalescu

Meteorに固有の何かを探しているなら、Steve Jobsと呼ばれる新しいパッケージがあります。メソッドを呼び出すのと同じくらい簡単にバックグラウンドジョブを実行できます。

ジョブを1回だけ実行する、失敗したジョブを再試行するなど、予想されるすべての標準機能を備えています。 GitHubで詳細を確認できます。

http://github.com/msavin/stevejobs

2
Max Savin

特定の間隔または日付でタスクをスケジュールするために使用できるCronジョブに基づくパッケージがあります。パッケージは次のとおりです。 https://atmosphere.meteor.com/package/cron

そして、そのパッケージのソースを調べると、彼らは単に次のものを使用していることに気付くでしょう。

Meteor.setInterval( ... , delay );

したがって、タスクをデータベースに保存し、起動時にタスクを間隔にロードすると、おそらく正しい軌道に乗ることができます。

2
miketucker

ロードマップには適切なサポートがあると思いますが、その間にsetIntervalを介してなんとかハッキングすることができました。 cron-tick パッケージを参照してください。

0
Tom Coleman