コマンドラインリクエスタ 同じアプリケーション名のスレッドが複数起動されている時
お世話になります。
先日、「RIA コンテキストに対する最後のリクエスト」にて
丹田さんより教えて頂いたCtxLstUse()とCtxClose()を使用した
ゴミコンテキストの削除方法につきまして
タスクスケジューラで定期的に実行したいと考えて
コマンドラインリクエスタにて削除用プログラムをコールする事で
思った動作となりました。(ありがとうございました。)
しかし、
コマンドラインリクエスタは同じアプリケーション名のスレッドが複数起動されている時
どのスレッドが対象になるかわかりませんが、1つのスレッドにしかアクセスできないため、
またまアクセスしたスレッドのコンテキストを操作する事しかできません。
そこでブローカモニタに表示されているMagicXpaサーバの情報等を
コマンドラインリクエスタのパラメータに付加をて実行したいと考えました。
管理パラメータである -QUERYにはスレッドのhost/portを指定するパラメータがありますが
実行パラメータの中にはなさそうです。
この様に同じアプリケーション名のスレッドが複数起動されている時に
個別のスレッドをコマンドラインリクエスタによりプログラムコールする方法はないのでしょうか。
宜しくお願い致します。
-
発想はちょっと違うのですが、メインプログラムのタスク前処理で、管理者だけが起動できる無限ループのバッチを起動しておいて、そこでタイマーイベントで定期的に削除するという方法はダメでしょうか?メインプログラムからであれば、すべてのコンテキストが対象になると思います。試したわけではないので、うまくいくかどうか分かりませんが。
-
丹田さんいつもありがとうございます。
既に沢山のユーザが使用している基本的に止められない環境に仕込事になります。
現在問題なく稼働でいている環境に出来る限り影響のない形で仕込む事を考えた結果、
コマンドラインリクエスタの選択を考えました。
スレッドを指定してコール出来る方法がないものでしょうか。
宜しくお願い致します。
-
ヘルプを見ますと、実行パラメータに [-HOST, -PORT] というのがありますが、これではダメでしたか?
-
既に [-HOST, -PORT] を試していました。
ヘルプに
「MRBのアドレス(ホスト名、ポート番号)を指定します。」
と有るようにMRBの値を指定した場合は接続できますが、
各スレッドのホスト、ポートを指定しても
無反応になります。 -
「スレッドが複数」と書いておられますが、RIAサーバのどういう形態のライセンスを利用されているのでしょうか?
ファイアウォールの設定かなにかで、そのホストにリクエストが到達していないということはありませんか?
-
「コンテキスト非稼働タイムアウト」が効かないということ自体が、どこかに原因があるように思われてなりませんが。。。
ちなみに、xpa 4.8.1のヘルプを見ますと、4.8.1から「クライアントコンテキスト非稼働タイムアウト」というオプションが追加されていますね。ヘルプにはWebClientの記述しかなされていませんが、RIAにも効きそうですね。
-
> 各スレッドのホスト、ポートを指定しても
> 無反応になります。推測ですが、これの原因を究明すれば「コンテキスト非稼働タイムアウト」が効かない理由も判明するかもしれませんね。
-
ありがとうございます。
>「スレッドが複数」と書いておられますが、RIAサーバのどういう形態のライセンスを利用されているのでしょうか?
多くの利用者がいますので
1つのスレッド(この呼び方が正しいかはわかりませんが)に固定のライセンス数(MaxConcurrentRequests)を割り振って同じアプリケーションを複数起動して運用しています。
例え1スレッドが何かの問題で落ちても他のスレッドが生きていれば運用は可能である事等からこの方式を採用しています。
> ファイアウォールの設定かなにかで、そのホストにリクエストが到達していないということはありませんか?スレッドを指定できないだけで、
実行し結果が出ていますのでファイアウォールの設定では無いと思われます。(まだテスト環境ですが)
>「コンテキスト非稼働タイムアウト」が効かないということ自体が、どこかに原因があるように思われてなりませんが。。。全く有効でないわけではなく、原因は不明ですがコンテキストが残り続ける事があるのです。
元々はこの原因を追求するため、ゴミと思われるコンテキストの最後のリクエスト(何をしたのか)を
知る方法はないかと調査していました。それとは別に自動でゴミと思われるコンテキストを定期的に監視し削除する方法を模索しています。
-
ありがとうございます。環境を理解しました。Magic Enterpriseサーバのスレッドライセンスのようなものかと思っていました。
複数のRIAサーバが複数のマシンで稼働しているということなのですが、MRBは1台で一元管理されていますか、それともRIAサーバごとにMRBを立ち上げていますか?
-
MRBは一元管理されています。
-
ちょっと古い記憶なんですが、1台のMRBが複数のアプリケーションを一元管理していて、アプリケーション名が同じで、なおかつリクエスタ(MGrqispi.dll)の場所も同じであった場合、MRBがどちらのアプリケーションサーバに個々のリクエストを流すかという振り分けが微妙だったような記憶があります。
各アプリケーションサーバへのリクエストの振り分けは、何かされておられますか?
-
実運用の中では振り分けは正常に行われています。
サインインしてコメントを残してください。
コメント
12件のコメント