1

リモート 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. キューにまだアイテムがある場合、このメソッドは想定どおりに機能します。

この記事を見つけました: MSMQ 発信キューを作成するにはどうすればよいですか? それは言う:

MSMQ は、別のメッセージを送信しようとしている場合に備えて、数分間 (空であっても) キューを保持します。これにより、キュー マネージャーがネットワーク接続を再度確立する手間が省けます。このクリーンアップの遅延は、CleanupInterval レジストリ値 (クライアントの場合は 5 分、サーバーの場合は 2 分) によって制御されます。

現在、レジストリ設定を微調整することはできません。別のオプションは、おそらく WMI を介してメッセージ数を取得することですが、Ruby でこれを行う方法がわかりません (.NET 開発者)。

キューを「目覚めさせる」可能性はありますか?

助けていただければ幸いです!ありがとうございました

4

1 に答える 1

1

効率を高めるために、MSMQ は次のようなキューのパフォーマンス データを維持しません。

  1. 空にして、
  2. 閉まっている

たとえば、そのようなデータがアクティブに維持されている場合、メモリ リソースをロックする数千の空のキューを持つマシンを使用できます。事実上、アプリケーションによって開かれるまで、空のキューは分析対象として存在しません。

送信キューに関する私のブログ投稿は、プライベート キューに関する情報を照会しているため、この状況とは何の関係もありません。

乾杯ジョン・ブレイクウェル

于 2012-01-18T19:30:09.417 に答える