リモートの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アドレスです。
この方法は、実際に魅力として動作しますが、:
キューが空の場合は、その後、私は一定時間後にこのエラーを取得しておいてください。
`method_missing ':初期化(WIN32OLERuntimeError ) OLEエラーコード:MSMQManagementのC00E0004 キューが開いていないか、存在しない可能性があります。 HRESULTエラーコード:0x80020009 例外が発生しました。
キューにアイテムがまだ残っている場合、この方法は想定どおりに機能します。 How do I create an MSMQ outgoing queue? 言う:
MSMQはあなたが別のメッセージを送信しようとしているだけの場合には数分間生きているキューを(それが空であっても)続け
現在のところ、レジストリ設定を調整するオプションはありません。 もう1つのオプションは、おそらくWMIを通じてメッセージ数を調べることですが、Ruby(.NET開発者)でこれをどうやって行うのか分かりません。
キューを "起きる"可能性はありますか?
私は助けていただきありがとうございます! は、効率化のためにあなた
こんにちはジョン、あなたの答えをありがとう。 多くのリソースを消費するメッセージキューのこの問題は、今私によく理解されています。 ただし、この部分は "有効に空のキューは、アプリケーションによって開かれるまで分析対象として存在しません。"少し問題があります。 「非アクティブ」メッセージキューを照会すると、サーバーに到達できない場合と同じ例外が発生します。その原因が何であるかを知ることは困難です。空のキューが「効果的に存在しない」場合は、このキューのパフォーマンスカウンタを分析することはできません。それは本当に不可能ですか? – Helikaon
簡易テスト:パフォーマンスモニタを読み込み、「MSMQ Queue \ Messages in queue」オブジェクトのインスタンスを追加しようとします。選択可能なキューのリストには、空/非アクティブキューは含まれません。 –
回避策の1つは、受信側アプリケーションが決して読み取らない各キューにメッセージを格納することでした。この「キープアライブ」メッセージは、キューがパフォーマンス監視のために表示されるようにします。明らかに、メッセージをキューの先頭から自動的に受信するだけのアプリケーションでは機能しません。 –