- goroutineの数を制限しつつ並列にジョブを実行したい
- ジョブは定期的に投入できたい
- ジョブが空っぽになっても終了しないで欲しい
- SIGTERMとか送ったら実行中のジョブが完了するまで待ってから終了してほしい
というようなものが欲しくなることが最近よくある!のでメモ
参考
- fireworq/dispatcher.go at 86126cb7de9fdc5ccc98d57aaa80f1abd5694463 · fireworq/fireworq · GitHub
- worker.go · GitHub
- Big Sky :: golang の channel を使ったテクニックあれこれ
実装
gistbe9fac4aa02419d68c6770a85e53c936
この実装ではmainの中のforループでのみジョブをenqueueしているが、
- 定期的に外部リソース(APIたたいたり、DBを眺めにいったり)からデータを取得してジョブをenqueueしたり
- HTTPサーバーをたててHTTP経由でジョブをenqueueできるようにして、別のプロセスから定期的にジョブをenqueueしたり
とかいろいろできて便利〜