コンテンツにスキップ

キューイング

プリザンターの年間サポートサービスのページへのリンクバナー

(本機能はExtensionsトライアルで試用可能です)

概要

高負荷処理を、リクエスト中に即時実行するのではなく、バックグラウンドジョブとしてキュー(待ち行列)へ登録し、順次実行する機能です。ユーザは、画面を通じて自分が実行したジョブの一覧を確認できますが、他のユーザが実行したジョブの一覧を確認することはできません。

本機能の効果

本機能を有効化することで、以下の効果を得られます。

  1. 高負荷処理のリクエストタイムアウトを防ぐ
  2. 大量データ処理中のユーザ操作ブロックを防ぐ
  3. 高負荷処理の処理状況を可視化する

キューイングの基本仕様

  1. ユーザがキューイングに対応した操作を実行すると、すぐには実行されず、ジョブとしてキューへ登録されます。キューへの登録は即座に完了し、ユーザは別の操作を実行できます。
  2. キューに登録されたジョブはジョブの管理画面で確認できます。
  3. ジョブは、最初、実行を待つ「待機」という「 状況 」でキューへ登録されます。ユーザは「待機」中のジョブをいつでもキャンセルできます。
  4. キューに登録されたジョブは、先に登録されたジョブから順に1つずつ取り出され、実行されます。
  5. 実行が始まると、ジョブの「 状況 」は「待機」から「実行中」へ変わります。「実行中」のジョブは、キャンセルすることも、削除することもできません。
  6. ジョブの実行中に、予期せずプリザンターが再起動した場合、「実行中」のジョブは既定の設定では「エラー」に変わります。この挙動はパラメータ設定で変更可能です。
  7. ジョブの実行時間はプリザンターにより監視されています。ジョブの実行時間がパラメータで設定した閾値(時間)よりも長くなると、「 状況 」が「実行中」から「実行中(時間超過)」に変わります。「 状況 」が「実行中(時間超過)」のジョブは、ボタン操作により次のジョブ1つと並列実行できます。
  8. 実行中のジョブが正常終了すると、ジョブの「 状況 」は「実行中」から「完了」へ変わります。
  9. 実行中のジョブが異常終了すると、ジョブの「 状況 」は「実行中」から「エラー」へ変わります。
  10. 「 状況 」が「キャンセル」、「エラー」、「完了」のジョブは、画面操作で削除できるほか、一定時間経過後に自動削除するように設定することができます。

対応するジョブ種別

対応バージョン 対応するジョブ種別
1.5.6.0 以降 レコードの「エクスポート」
1.5.7.0 以降 レコードの「インポート」

注意事項

  1. 本機能を有効化する際は、BackgroundJobs.jsonのパラメータOutputFilePathとInputFilePathに適切な値を設定してください。未設定の場合、処理がエラーとなり、キュー機能を利用できません。

制限事項

  1. キューは同時実行1件(直列1本)で処理されます。

キューイングを有効化する

キューイングを有効化するには、BackgroundJobs.jsonのBackgroundQueueをtrueに設定してください。

ジョブの管理画面

キューイングに対応したジョブを実行すると、ジョブはキューへ登録され、ジョブの管理画面から確認、操作できるようになります。詳細はジョブの管理画面を参照してください。

キューへ登録されたジョブが並ぶジョブの管理画面

ジョブの状況

  1. キューイングに対応した操作を実行すると、キューへジョブとして登録され、「 状況 」が「待機」となります。
  2. 「 状況 」が「待機」のジョブをキャンセルした場合は、「キャンセル」へ変化します。
  3. キューに登録されたジョブは先に登録されたものから順に実行され、「 状況 」が「待機」から「実行中」に変化します。
  4. 「 状況 」が「実行中」のジョブは、正常終了した場合に「完了」へ、異常終了した場合に「エラー」へ、それぞれ変化します。
  5. 「 状況 」が「実行中」のジョブが、パラメータで設定した閾値(時間)を超えても、「完了」にも「エラー」にもならない場合、「実行中(時間超過)」へ変化します。
  6. 「準備中」は、インポートなど、ファイルアップロードが必要な処理専用の「 状況 」です。エクスポート処理はこの「 状況 」に変化しません。「 状況 」が「準備中」のままBackgroundJobs.jsonのBackgroundJobTimeoutに設定した時間を超過(タイムアウト)した場合、「エラー」に変化します。エクスポートのように「準備中(時間超過)」には変化しません。「準備中」のジョブがある状態でアプリケーションが障害から復旧した場合、「BackgroundJobs.json」のRecoverActionの設定値にかかわらず、「エラー」に変化します。
状況 説明 キャンセル 削除
待機 キューへ登録され、実行待ちの状態。 可 可
準備中 CSVのアップロード中であることを示す状態 - -
実行中 キューから取得され、処理中の状態。 - -
完了 正常終了し、出力ファイルをダウンロードできる状態。 - 可
エラー 異常終了し、エラー内容を確認できる状態。 - 可
キャンセル 「待機」中にキャンセルされた状態。 - 可
実行中(時間超過) 設定した時間(閾値)を超え、処理が続いている状態 - -

ジョブの削除

完了したジョブや、エラーになったジョブ、キャンセルしたジョブは、ユーザが削除しない限りキューに残ります。以下の機能で、不要なジョブを削除できます。

  1. ジョブの管理画面では不要になったジョブを一括削除できます。
  2. 「詳細画面」では不要になったジョブを1つずつ削除できます。
  3. BackgroundService.jsonのパラメータ「DeleteBackgroundJobs」をtrueに設定することで、「 状況 」が「完了」「エラー」「キャンセル」となったジョブを、一定期間経過後に自動削除する機能を有効化できます。
  4. ジョブを削除すると、ジョブの完了と共に保存される「出力ファイル」も削除されます。

実行時間が長いジョブへの対応

3つのジョブ、ジョブA、ジョブB、ジョブCが、この順番でキューに登録されているケースで説明します。

ジョブAが「実行中」に変わると、次のジョブBは、ジョブAの完了を待たなければなりません。ジョブAの実行時間が長い場合、後続のジョブB、ジョブCがすぐに完了するジョブであっても、直前のジョブの完了を待つ必要があります。

ジョブA・B・Cが順番待ちになり、後続が待たされる様子を示す図

そこで、ジョブの実行時間に閾値を定め、閾値を超えても「 状況 」が「完了」または「エラー」に変わらないジョブを、次のジョブ1つと並列実行できるようにしています。閾値を超えたジョブは「 状況 」が「実行中(時間超過)」に代わります。ジョブAの実行中に、ジョブの管理画面を開き、ジョブAを選択して「次のジョブを実行」ボタンをクリックすると、次に待機中のジョブBを、ジョブAと並列実行できます。ジョブBがジョブAよりも先に「完了」した場合、もう一度ジョブAを選択して「次のジョブを実行」ボタンをクリックすると、次に待機中のジョブCをジョブAと並列処理できます。

実行時間を超過したジョブAと次のジョブBを並列実行する様子を示す図

ジョブの実行時間の閾値はBackgroundJobs.jsonのパラメータBackgroundJobTimeoutで設定できます。

「次のジョブを実行」に関する注意事項
「次のジョブを実行」によりジョブの並列実行を増やすとリソースの消費が進み、高負荷処理のリクエストタイムアウトを防ぐというキューイングの効果が薄れる可能性があります。

ジョブの参照・操作範囲

ユーザが参照、操作できるジョブの範囲は、ユーザの権限に応じて制御されます。

対象ユーザ 参照・操作範囲
特権ユーザ すべてのテナントのすべてのバックグラウンドジョブ
テナント管理者 自テナントのすべてのバックグラウンドジョブ
一般ユーザ 自テナント内の自分のバックグラウンドジョブのみ

対応バージョン

対応バージョン 内容
1.5.6.0 以降 機能追加
1.5.7.0 以降 対応するジョブ種別に「インポート」を追加

関連情報