2012-01-18 2 views
1

リモートのmsmqキューからのメッセージ数のクエリに問題があります。ルビーのMSMQメッセージ数の読み取り

これは私のコードです:

def get_message_count 
    mq_management = WIN32OLE.new('MSMQ.MSMQManagement') 
    mq_management.Init('xxx.yyy.zz.aa', nil,'direct=tcp:xxx.yyy.zz.aa\private$\inbox') 
    message_count = mq_management.MessageCount 
end 

xxx.yyy.zz.aaは、リモートコンピュータのIPアドレスです。

この方法は、実際に魅力として動作しますが、:

  1. キューが空の場合は、その後、私は一定時間後にこのエラーを取得しておいてください。

    `method_missing ':初期化(WIN32OLERuntimeError ) OLEエラーコード:MSMQManagementのC00E0004 キューが開いていないか、存在しない可能性があります。 HRESULTエラーコード:0x80020009 例外が発生しました。

  2. キューにアイテムがまだ残っている場合、この方法は想定どおりに機能します。 How do I create an MSMQ outgoing queue? 言う:

    MSMQはあなたが別のメッセージを送信しようとしているだけの場合には数分間生きているキューを(それが空であっても)続け

私はこの記事を見つけました。これにより、キューマネージャはネットワーク接続を再確立する労力を節約できます。このクリーンアップの遅延は、クライアントの場合は5分、サーバーの場合は2分というCleanupIntervalレジストリ値によって制御されます。

現在のところ、レジストリ設定を調整するオプションはありません。 もう1つのオプションは、おそらくWMIを通じてメッセージ数を調べることですが、Ruby(.NET開発者)でこれをどうやって行うのか分かりません。

キューを "起きる"可能性はありますか?

私は助けていただきありがとうございます! は、効率化のためにあなた

答えて

1

ありがとう、MSMQは、キュー上のパフォーマンスデータを維持しない:

  1. 空、そして
  2. あなたは、例えば、マシンを持っている可能性が

をクローズそのようなデータが積極的に維持されていれば、メモリリソースをロックする1000sの空のキューがあります。効果的には、空のキューは、アプリケーションによって開かれるまで分析対象として存在しません。

プライベートキューに関する情報を照会しているので、発信キューに関する私のブログ記事はこの状況とは関係ありません。

乾杯 ジョンブレークウェル

+1

こんにちはジョン、あなたの答えをありがとう。 多くのリソースを消費するメッセージキューのこの問題は、今私によく理解されています。 ただし、この部分は "有効に空のキューは、アプリケーションによって開かれるまで分析対象として存在しません。"少し問題があります。 「非アクティブ」メッセージキューを照会すると、サーバーに到達できない場合と同じ例外が発生します。その原因が何であるかを知ることは困難です。空のキューが「効果的に存在しない」場合は、このキューのパフォーマンスカウンタを分析することはできません。それは本当に不可能ですか? – Helikaon

+0

簡易テスト:パフォーマンスモニタを読み込み、「MSMQ Queue \ Messages in queue」オブジェクトのインスタンスを追加しようとします。選択可能なキューのリストには、空/非アクティブキューは含まれません。 –

+0

回避策の1つは、受信側アプリケーションが決して読み取らない各キューにメッセージを格納することでした。この「キープアライブ」メッセージは、キューがパフォーマンス監視のために表示されるようにします。明らかに、メッセージをキューの先頭から自動的に受信するだけのアプリケーションでは機能しません。 –

関連する問題