疑問に思っているのですが、おそらくワーカープールを使用してバックグラウンドタックを実装する方法はありますか。方向性を教えてもらえますか、このためのパッケージを書くことを考えていますか?
4 に答える
2019年更新
何かのパッケージを作成することを考える前に、まず、必要なことを実行する既存のパッケージがあるかどうかを確認してください。Meteor の世界では、これは Atmosphere で「ジョブ/キュー/タスク/ワーカー管理/スケジューリング」パッケージを検索し、npm で同じ検索語を検索することを意味します。また、要件をより正確に定義する必要があります。
- 永続性が必要ですか、それともインメモリ ソリューションが機能しますか?
- ジョブを異なるマシンに分散できるようにしたいですか?
流星固有
- job-collection - 信頼性があります (2014 年にスタートアップの本番環境で使用しました) が、現在はメンテナンス モードです。どこでも (サーバー、クライアント) 実行される永続的なジョブをスケジュールできます。
- SteveJobs - いくつかの強力な Meteor ツールの作成者である Max Savin によって積極的に管理されています
- littledata:synced-cron - 「Meteor 用のシンプルな cron システムです。複数のプロセス間でのジョブの同期をサポートしています。」
放棄されたパッケージ:
- artwells:queue - 優先度、スケジューリング、ロギング、再キューイング。MongoDB がサポートするキュー。最後のコード コミット: 2015 年 10 月。
- 超基本的な cron パッケージ: easycron . 最終更新: 2015 年 12 月。
- difference:workers - 非同期ジョブで動作するヘッドレス ワーカー meteor プロセスを生成します. 最後のコードコミット: 2015 年 1 月
- cron ( 2015年以降)
- PowerQueue - 2014 年以降廃止されました。非同期タスクをキューに入れ、リソースの使用量を調整し、再試行に失敗しました。サブキューをサポートします。スケジューリングなし。テストはありませんが、気の利いたデモです。再帰呼び出しを使用するため、長時間の実行には適していません。
Npm パッケージ
Meteor は数年前から npm パッケージを直接使用できるようになっているため、この質問は NPM でジョブ/ワーカー/キュー管理パッケージを見つけることになります。永続性を気にしない場合:
- Asyncは、「通常の「機能的」容疑者 (
map
、reduce
、 ...) と、非同期制御フローの一般的なパターン ( 、filter
、...) を含む約 70 の関数を提供します」each
parallel
series
waterfall
- d3-queue - ミニマル、D3 作者 Mike Bostock によって書かれました
持続性が必要な場合、Meteor は既に MongoDB を使用しているため、MongoDb への持続性を備えたジョブ スケジューリング パッケージを使用すると有利な場合があります。最も強力で人気のあるのはAgendaのようですが、残念ながら数か月間メンテナンスされておらず、かなりの問題のバックログがあります。
プロジェクトにredisに基づく依存関係を追加する場合は、さらに多くの選択肢があります。
- bull - Redis に支えられた、ノード向けの最もフル機能のジョブ キュー ソリューション
- bee - シンプル、高速、堅牢。Bull が示すメモリ リークの影響を受けない
- Kue - Node の優先ジョブキュー
MongoDB と同様に、Redis も (Redis Sentinel を介して) 高可用性を提供できます。複数のワーカー マシンにジョブを分散する場合は、それらすべてを同じ Redis サーバーに向けることができます。
特定の間隔または日付でタスクをスケジュールするために使用できる Cron ジョブに基づくパッケージがあります。パッケージは次のとおりです: https://atmosphere.meteor.com/package/cron
そして、たまたまそのパッケージのソースを調べると、彼らが単に使用していることに気付くでしょう:
Meteor.setInterval( ... , delay );
したがって、タスクをデータベースに保存し、起動時に一定間隔でロードすると、おそらく正しい方向に進むでしょう。
Meteor 固有のものをお探しの場合は、Steve Jobs という新しいパッケージがあることをお知らせします。メソッドを呼び出すのと同じくらい簡単にバックグラウンド ジョブを実行できます。
ジョブを 1 回だけ実行する、失敗したジョブを再試行するなど、期待されるすべての標準機能を備えています。詳細については、GitHub を参照してください。
適切なサポートが彼らのロードマップにあると推測していますが、それまでの間、私はsetInterval
. cron-tickパッケージを参照してください。