キューイング
(本機能はExtensionsトライアルで試用可能です)
概要¶
高負荷処理を、リクエスト中に即時実行するのではなく、バックグラウンドジョブとしてキュー(待ち行列)へ登録し、順次実行する機能です。ユーザは、画面を通じて自分が実行したジョブの一覧を確認できますが、他のユーザが実行したジョブの一覧を確認することはできません。
本機能の効果¶
本機能を有効化することで、以下の効果を得られます。
- 高負荷処理のリクエストタイムアウトを防ぐ
- 大量データ処理中のユーザ操作ブロックを防ぐ
- 高負荷処理の処理状況を可視化する
キューイングの基本仕様¶
- ユーザがキューイングに対応した操作を実行すると、すぐには実行されず、ジョブとしてキューへ登録されます。キューへの登録は即座に完了し、ユーザは別の操作を実行できます。
- キューに登録されたジョブはジョブの管理画面で確認できます。
- ジョブは、最初、実行を待つ「待機」という「 状況 」でキューへ登録されます。ユーザは「待機」中のジョブをいつでもキャンセルできます。
- キューに登録されたジョブは、先に登録されたジョブから順に1つずつ取り出され、実行されます。
- 実行が始まると、ジョブの「 状況 」は「待機」から「実行中」へ変わります。「実行中」のジョブは、キャンセルすることも、削除することもできません。
- ジョブの実行中に、予期せずプリザンターが再起動した場合、「実行中」のジョブは既定の設定では「エラー」に変わります。この挙動はパラメータ設定で変更可能です。
- ジョブの実行時間はプリザンターにより監視されています。ジョブの実行時間がパラメータで設定した閾値(時間)よりも長くなると、「 状況 」が「実行中」から「実行中(時間超過)」に変わります。「 状況 」が「実行中(時間超過)」のジョブは、ボタン操作により次のジョブ1つと並列実行できます。
- 実行中のジョブが正常終了すると、ジョブの「 状況 」は「実行中」から「完了」へ変わります。
- 実行中のジョブが異常終了すると、ジョブの「 状況 」は「実行中」から「エラー」へ変わります。
- 「 状況 」が「キャンセル」、「エラー」、「完了」のジョブは、画面操作で削除できるほか、一定時間経過後に自動削除するように設定することができます。
対応するジョブ種別¶
| 対応バージョン | 対応するジョブ種別 |
|---|---|
| 1.5.6.0 以降 | レコードの「エクスポート」 |
| 1.5.7.0 以降 | レコードの「インポート」 |
注意事項¶
- 本機能を有効化する際は、BackgroundJobs.jsonのパラメータOutputFilePathとInputFilePathに適切な値を設定してください。未設定の場合、処理がエラーとなり、キュー機能を利用できません。
制限事項¶
- キューは同時実行1件(直列1本)で処理されます。
キューイングを有効化する¶
キューイングを有効化するには、BackgroundJobs.jsonのBackgroundQueueをtrueに設定してください。
ジョブの管理画面¶
キューイングに対応したジョブを実行すると、ジョブはキューへ登録され、ジョブの管理画面から確認、操作できるようになります。詳細はジョブの管理画面を参照してください。
ジョブの状況¶
- キューイングに対応した操作を実行すると、キューへジョブとして登録され、「 状況 」が「待機」となります。
- 「 状況 」が「待機」のジョブをキャンセルした場合は、「キャンセル」へ変化します。
- キューに登録されたジョブは先に登録されたものから順に実行され、「 状況 」が「待機」から「実行中」に変化します。
- 「 状況 」が「実行中」のジョブは、正常終了した場合に「完了」へ、異常終了した場合に「エラー」へ、それぞれ変化します。
- 「 状況 」が「実行中」のジョブが、パラメータで設定した閾値(時間)を超えても、「完了」にも「エラー」にもならない場合、「実行中(時間超過)」へ変化します。
- 「準備中」は、インポートなど、ファイルアップロードが必要な処理専用の「 状況 」です。エクスポート処理はこの「 状況 」に変化しません。「 状況 」が「準備中」のままBackgroundJobs.jsonのBackgroundJobTimeoutに設定した時間を超過(タイムアウト)した場合、「エラー」に変化します。エクスポートのように「準備中(時間超過)」には変化しません。「準備中」のジョブがある状態でアプリケーションが障害から復旧した場合、「BackgroundJobs.json」のRecoverActionの設定値にかかわらず、「エラー」に変化します。
| 状況 | 説明 | キャンセル | 削除 |
|---|---|---|---|
| 待機 | キューへ登録され、実行待ちの状態。 | 可 | 可 |
| 準備中 | CSVのアップロード中であることを示す状態 | - | - |
| 実行中 | キューから取得され、処理中の状態。 | - | - |
| 完了 | 正常終了し、出力ファイルをダウンロードできる状態。 | - | 可 |
| エラー | 異常終了し、エラー内容を確認できる状態。 | - | 可 |
| キャンセル | 「待機」中にキャンセルされた状態。 | - | 可 |
| 実行中(時間超過) | 設定した時間(閾値)を超え、処理が続いている状態 | - | - |
ジョブの削除¶
完了したジョブや、エラーになったジョブ、キャンセルしたジョブは、ユーザが削除しない限りキューに残ります。以下の機能で、不要なジョブを削除できます。
- ジョブの管理画面では不要になったジョブを一括削除できます。
- 「詳細画面」では不要になったジョブを1つずつ削除できます。
- BackgroundService.jsonのパラメータ「DeleteBackgroundJobs」をtrueに設定することで、「 状況 」が「完了」「エラー」「キャンセル」となったジョブを、一定期間経過後に自動削除する機能を有効化できます。
- ジョブを削除すると、ジョブの完了と共に保存される「出力ファイル」も削除されます。
実行時間が長いジョブへの対応¶
3つのジョブ、ジョブA、ジョブB、ジョブCが、この順番でキューに登録されているケースで説明します。
ジョブAが「実行中」に変わると、次のジョブBは、ジョブAの完了を待たなければなりません。ジョブAの実行時間が長い場合、後続のジョブB、ジョブCがすぐに完了するジョブであっても、直前のジョブの完了を待つ必要があります。
そこで、ジョブの実行時間に閾値を定め、閾値を超えても「 状況 」が「完了」または「エラー」に変わらないジョブを、次のジョブ1つと並列実行できるようにしています。閾値を超えたジョブは「 状況 」が「実行中(時間超過)」に代わります。ジョブAの実行中に、ジョブの管理画面を開き、ジョブAを選択して「次のジョブを実行」ボタンをクリックすると、次に待機中のジョブBを、ジョブAと並列実行できます。ジョブBがジョブAよりも先に「完了」した場合、もう一度ジョブAを選択して「次のジョブを実行」ボタンをクリックすると、次に待機中のジョブCをジョブAと並列処理できます。
ジョブの実行時間の閾値はBackgroundJobs.jsonのパラメータBackgroundJobTimeoutで設定できます。
| 「次のジョブを実行」に関する注意事項 |
|---|
| 「次のジョブを実行」によりジョブの並列実行を増やすとリソースの消費が進み、高負荷処理のリクエストタイムアウトを防ぐというキューイングの効果が薄れる可能性があります。 |
ジョブの参照・操作範囲¶
ユーザが参照、操作できるジョブの範囲は、ユーザの権限に応じて制御されます。
| 対象ユーザ | 参照・操作範囲 |
|---|---|
| 特権ユーザ | すべてのテナントのすべてのバックグラウンドジョブ |
| テナント管理者 | 自テナントのすべてのバックグラウンドジョブ |
| 一般ユーザ | 自テナント内の自分のバックグラウンドジョブのみ |
対応バージョン¶
| 対応バージョン | 内容 |
|---|---|
| 1.5.6.0 以降 | 機能追加 |
| 1.5.7.0 以降 | 対応するジョブ種別に「インポート」を追加 |




