きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Hangfireを使ってみる (4):Jobの種類について:1. Fire-and-forget

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により実行されるまでの間、ダッシュボードで見るとこの状態です。 f:id:kiyokura:20170806130955p:plain

データベース上では以下のようになっています

Jobテーブル

jobテーブル上のステータスでは、現在キューに積まれていることを示す Enqueued となっています。

f:id:kiyokura:20170806131107p:plain

JobQueueテーブル

実際のキューであるJobQueueテーブルにエントリが作成され、処理待ちの状態になっています。

f:id:kiyokura:20170806131337p:plain

実行について

この後、Hangfire Serverがキューを舐めて処理が開始されます。 Job StorageがSQL Serverの場合、Hangfireサーバーは定期的にキューをポーリングして実行します。このポーリング間隔はSqlServerStorageOptionsQueuePollInterval で指定します。デフォルトでは15秒となってます。

規定値から変更したい場合はHangfire Server側のJob Storageの設定時に、以下のドキュメントのとおりに設定します。

Using SQL Server - Configuring the Polling Interval

次回

次は『Delayed』について調べたことを書きます。