アクティブキュー
Blue Prism製品には、セッション内でキューに入れ、事前定義された順序で作業できるようにするためのワークキューがあります。
セッションは、従来のセッション管理モデルを使用し、処理を行うケースについてワークキューにポーリングを行うリソースで開始します。これらのセッションは、コントロールルームで手動により開始するか、Blue Prismサーバーインスタンスで実行するスケジューラーサービスで開始します。
アクティブキューは、キューを処理するセッションを管理する代替メカニズムを導入します。これはワークキューとセッション間の密接な関連付けを作成することにより実現されます。
コントロールルームでセッションを個別に作成し、キュー管理ページを開いて結果を確認する代わりに、アクティブキューではキューを処理するリソースの目標数を設定できます。Blue Prismでは、アクティブキューの構成を使用して、その目標を達成する方法を決定します。
アクティブキューの要件
Blue Prismがキューに代わってセッションを開始および停止する方法を決定するには、キューについて以下の点を把握しておく必要があります。
- キューを処理するプロセス
- キューの処理に使用するリソース
この情報は、Blue Prismクライアントの[システム]セクションの[ワークキューの構成]ページで、パブリッシュされたプロセスと、キューを持つリソースグループを関連付けて設定されます。
Blue Prismは、この情報を基に利用可能なリソースを探し、そこにプロセスを作成します。キューはそこで処理されます。
実行されているセッションをアクティブキューに代わって停止するには、セッションに対して「停止リクエスト」を送ります。そうすると、処理の途中で停止されなくなります。
プロセスの要件
アクティブキューに代わって実行するプロセスは、いくつかの基本的な要件を満たす必要があります。
- アクティブキューで割り当てられたプロセスとして設定するには、プロセスをパブリッシュする必要があります。
-
プロセスにメインループが含まれていることを想定し、ループ内の決定ステージを使用してIsStopRequested()関数をクエリし、安全な停止をリクエストする必要があります。
これは、アクティブキューのコントローラーが、管理対象のアクティブキューに代わって実行しているセッションを停止するためのしくみです。
-
プロセスがスタートアップパラメーターの影響を受けないようにしてください。
しくみ
コントロールルームの[アクティブキュー]セクションに入ると、表示されているキューごとにアクティブキューコントローラーが作成されます。これらのコントローラーは、ユーザーがクライアントからログアウトするまでメモリ内に残ります。
各コントローラーは、キューに割り当てられているリソースで実行されているセッションを監視し、担当するキューの最新統計のデータベースをポーリングします。
ターゲットリソース値が設定されると、コントローラーはそのターゲットに到達するために新しいセッションを作成する必要があるかどうか、既存のセッションを停止する必要があるかどうかを判断します。新しいセッションが必要な場合は、新しいセッションを作成して開始します。既存のセッションを停止する必要がある場合は、目標値に達するための適切なセッション数まで停止リクエストを送信します。
セッションを作成する
ターゲットに到達するために新しいセッションを作成する必要があるとキューコントローラーが判断した場合、キューコントローラーは、そのキューに割り当てられているリソースグループ内の利用可能なリソースで新しいセッションを作成して開始します。
たとえば、最も使用率の低いリソースでセッションを作成します。グループに3つの利用可能なリソースがあり、そのうちの2つがバックグラウンドプロセスを実行している場合、最初に作成したセッションは、いずれのセッションも実行していないリソース上にあります。
何らかの理由でセッションの作成または開始に失敗した場合は、他のリソースで再試行されます。3回試行した後、セッションを中止し、セッションの作成が試行されなくなることを示すためにターゲット値を減らします。
セッションがコントローラーによって中止される原因となるエラーが発生した場合、エラーはBlue Prismイベントログに記録され、Windowsイベントビューアーを使用して表示されます。
セッションを停止する
ターゲットに到達するためには、既存のセッションを停止する必要があることをキューコントローラーが決定した場合、セッションを反復させて、最も古いセッション(つまり、一番早く開始したセッション)を選択し、停止リクエストを送信します。
コントローラーがセッションに停止リクエストを送信すると、セッションは「停止中」としてマークされます。この状態ではまだ「実行中」です。つまり、キューの「アクティブセッション」数にカウントされ、それ以降のセッションを実行できません。
正常に停止するには、作業者はIsStopRequested()関数を定期的にチェックする必要があります。停止がリクエストされていることを関数が示す場合、環境をクリーンアップし、プロセスを終了します。
セッションの完了または終了
アクティブキューに代わって実行されているセッションが完了または終了すると、そのキューの「アクティブセッション」数から除外され、それ以降のセッションで再び利用可能になります。
停止リクエストがキューコントローラーによって送信された後に完了や終了が発生した場合、ターゲットリソース値は変更されません(つまり、目標値に達するためにセッションが停止することを想定)。
停止リクエストがキューコントローラーによって送信される前に完了/終了が発生した場合、ターゲットリソースの値は減少します。それに代わる他のセッションは作成されません。
アクティブキューとリソースプール
ある程度まで、リソースプールは、アクティブキュー内の割り当てられたリソースグループと同じ問題を解決しようとします。つまり、利用可能なリソースを探し、そこでプロセスを実行しようとします。
そのため、アクティブキュー内でリソースプールを使用することはお勧めしません。アクティブキューコントローラーは、各リソースがそのキューに代わってセッションを実行するための単一のスロットを表すことを想定しています。リソースプールは、複数の排他セッションを実行できる単一のリソースのように見えるという点で透過的であり、キューコントローラーは、利用可能かどうかを確認するためにメンバーリソースにドリルダウンできません。
リソースプールをアクティブキューに割り当てられたリソースグループに含めると、そのリソースプールは「利用可能なリソース」カウントで単一のリソースとして扱われ、単一のセッションのみが割り当てられます。