3.7.4 スケジュールキューの閉塞制御
スケジュールキューの閉塞制御には,次の2種類があります。
-
強制閉塞
-
タイムアウト閉塞
ここでは,スケジュールキューの閉塞制御の概要について説明します。また,強制閉塞およびタイムアウト閉塞の実行手順についても説明します。
(1) スケジュールキューの閉塞制御の概要
スケジュールキューに対して,直接閉塞を実行することもできます。これによって,複数のJ2EEアプリケーションでスケジュールキューが共有されている場合に,一度にJ2EEアプリケーションを停止できます。スケジュールキューに登録されている仕掛かり中のリクエストについては,破棄するか一定の時間処理を続けるかを選択できます。処理を続ける場合は,一定の時間内に処理ができなければ強制的に破棄するように,タイムアウト時間が指定できます。また,仕掛かり中のリクエストについては,処理が続行されます。
スケジュールキューの閉塞が指示されると,CTMデーモンは,スケジュールキューの入り口を閉じてサービスを停止して,それ以降のリクエストを受け付けないようにします。また,すでにスケジュールキューに登録されたリクエストは,設定に従って,破棄するか,または処理を実行してからスケジュールキューの閉塞を完了します。リクエストを破棄する場合は,キューに登録されていたリクエストの処理はすべてエラーとしてクライアントに返却されます。処理を実行してから閉塞する場合は,一定時間処理を継続して,時間内に終了しなかった処理がエラーで返却されます。
スケジュールキューの閉塞制御の概要を,次の図に示します。
CTMを使用しているバックシステムで,ホスト内のJ2EEアプリケーションを一度に停止したり,キューを共有するJ2EEアプリケーションを一度に停止したりする場合,J2EEアプリケーションのスケジュールキューに対して直接閉塞を実行します。そのあと,J2EEアプリケーションを停止します。
運用管理コマンドを使用してJ2EEアプリケーションのスケジュールキューを直接閉塞する場合,スケジュールキューを共有するJ2EEアプリケーション単位,ホスト単位,または運用管理ドメイン単位でJ2EEアプリケーションを一度に停止できます。また,スケジュールキューに登録済みのリクエストを破棄するか,一定時間処理を続けるかどうかを選択します。スケジュールキューに登録済みのリクエストを破棄する場合,登録済みのリクエストはすべてエラーとしてクライアントに返却されます。一定時間処理を続ける場合,時間内に終了しなかった処理はエラーとしてクライアントに返却されます。
運用管理コマンドを使用した場合のCTMを使用したサービス閉塞の実行形式および実行例について説明します。ここでは,通常の手順で閉塞する方法と,強制的に閉塞する方法について説明します。強制閉塞は,CTMデーモンの負荷が高い場合などに,すぐにキューを閉塞したいときに実行する方法です。
(2) スケジュールキューの強制閉塞
スケジュールキューは,CTMデーモンとの通信をしないで閉塞することもできます。これを,スケジュールキューの強制閉塞といいます。強制閉塞は,CTMデーモンの負荷が高いときにすぐにキューを閉塞するための方法です。通常の閉塞方法では,キューを閉塞するときに,CTMデーモンと通信して,その処理の延長で滞留しているリクエストを破棄しています。しかし,この方法では,CTMデーモンの負荷が高い場合,通信処理に時間が掛かるため,閉塞処理にも時間が掛かってしまいます。
強制閉塞を使用すると,CTMデーモンとの通信処理をしないで,即座にキューを閉塞できます。なお,強制閉塞を使用した場合,滞留しているリクエストの破棄は,CTMデーモン間で負荷情報を監視するタイミングにあわせて実行されます。
強制閉塞をする場合は,運用管理コマンド(mngsvrutil)のサブコマンド「hold」の引数に,「queue force」を指定してください。スケジュールキューの強制閉塞をすると,滞留しているリクエストは一定時間後に破棄されます。滞留するリクエストを破棄したくない場合は,ctmholdqueコマンドで-CTMRequestLeaveオプションも指定してください。
なお,閉塞の解除方法については,通常の閉塞をした場合と同じです。コマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「mngsvrutil(Management Serverの運用管理コマンド)」を参照してください。
強制閉塞を実行する場合のmngsvrutilコマンドの実行例を次に示します。
- 実行形式
mngsvrutil -m <Management Serverのホスト名>[:<ポート番号>] -u <管理ユーザID> -p <管理パスワード> -t <ホスト名> -k host hold queues force
- 実行例
mngsvrutil -m mnghost -u user01 -p pw1 -t host01 -k host hold queues force
(3) スケジュールキューのタイムアウト閉塞
スケジュールキューでは,EJBクライアントのタイムアウトを一定間隔で監視し,タイムアウトの発生回数が,設定した回数を超えると,スケジュールキューを閉塞します。これを,スケジュールキューのタイムアウト閉塞といいます。
タイムアウト発生について次の図で説明します。
図では,10秒間隔でタイムアウト発生回数を監視しています。タイムアウト回数のカウントは,監視時間内だけとなります。次の監視時間ではタイムアウトの回数はリセットしてカウントされます。
このとき,例えば,タイムアウト発生回数として10回が設定されている場合,10秒の監視時間内で10回以上タイムアウトが発生すると,キューが閉塞されます。なお,キューが閉塞されるタイミングは,タイムアウト回数を10回以上検知したあとの,次の監視時間で閉塞されます。この図の場合,監視を始めてから30秒後に11回のタイムアウトを検知したので,タイムアウトを検知した30秒後にキューが閉塞されます。
なお,スケジュールキューのタイムアウト閉塞は,CTMデーモン起動時にオプションを指定することで実行します。ctmstartコマンドの-CTMWatchRequestオプションで設定します。