Hangfire にはジョブの種類(と実行タイミング)がいくつかあるので、それぞれの動きについて調べてみたのでメモ。
ジョブの種類
Hangfireで利用できるジョブの種類は主に以下があるようです。
No | 種別 | 説明 |
---|---|---|
1 | Fire-and-forget | 即時実行。すぐに一回実行。 |
2 | Delayed | 遅延実行。一定時間経過後に一回実行。 |
3 | Continuations | 連続実行。指定のジョブ完了後に一回実行。 |
4 | Recurring | 定期実行。指定したスケジュールに沿って定期的に実行。 |
そのほかに、有償のPro版の場合バッチ実行もできるそうですが、今回はそちらは試す予定がないので割愛。
1-4のタイプについて、それぞれ少し試しながら見てみます。
1. Fire-and-forget
即時実行されるタイプ。
BackgroundJob.Enqueue()
またはBackgroundJob.Enqueue<T>()
で登録されるとすぐにキューイングされ、サーバーがキューを舐めたタイミング時で一回だけ実行されます。
ドキュメントとしてはこちらを参照 : Calling methods in background
登録後、Hangfire Serverにより実行されるまでの間、ダッシュボードで見るとこの状態です。
データベース上では以下のようになっています
Jobテーブル
jobテーブル上のステータスでは、現在キューに積まれていることを示す Enqueued
となっています。
JobQueueテーブル
実際のキューであるJobQueueテーブルにエントリが作成され、処理待ちの状態になっています。
実行について
この後、Hangfire Serverがキューを舐めて処理が開始されます。
Job StorageがSQL Serverの場合、Hangfireサーバーは定期的にキューをポーリングして実行します。このポーリング間隔はSqlServerStorageOptions
のQueuePollInterval
で指定します。デフォルトでは15秒となってます。
規定値から変更したい場合はHangfire Server側のJob Storageの設定時に、以下のドキュメントのとおりに設定します。
Using SQL Server - Configuring the Polling Interval
次回
次は『Delayed』について調べたことを書きます。