2016-11-13 12 views
1
try 
    { 
     MQManager = new MQQueueManager(QueueManager); 
     try 
     { 
      MQRequestQueue = MQManager.AccessQueue(QueueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING); 

      return true; 
     } 
     catch (IBM.WMQ.MQException exIBM) 
     { 
      CloseConnection(); 
      ErrorCode = exIBM.Reason; 
      ErrorDescription = exIBM.Message; 
          } 
    } 
    catch (IBM.WMQ.MQException exIBM) 
    { 
     CloseConnection(); 
     ErrorCode = exIBM.Reason; 
     ErrorDescription = exIBM.Message; 

私は上記のC#コードを使用して、WebsphereMQが提供するMQseries dllを使用してMQに接続しています。 QueueManagerがダウンすると、例外が発生するまで20〜30秒かかるので、このコードですべてが停止しているのがわかります。MQキューマネージャがダウンしていることをMQクライアントが理解するまでに多くの時間がかかります

MQクライアントとサーバー間の通信に予期される動作はありますか? もしそうでなければ、次の利用可能なキューマネージャにヒットできるように、queuemanagerがダウンしているかどうかを検出するにはどうすればよいですか? タイムアウトプロパティはありますか?

答えて

1

完全なコードを提供していないので、使用しているタイプの接続、バインディング、またはクライアントについてコードから明らかではありません。アプリケーションが、同じマシン(アプリケーションと同じ)または異なるマシン上で実行されているキュー・マネージャーに接続しているかどうか。あなたのコードでMQEnvironmentクラスを初期化しましたか?

バインディング接続の場合、つまりアプリケーションが共有メモリーを使用して同じマシン上で実行されているキュー・マネージャーに接続する場合は、すぐに例外をスローする必要があります。

アプリケーションが異なるマシン上で実行されているキュー・マネージャーに接続すると、ネットワーク遅延が発生します。ホスト名の解決に時間がかかる可能性もあります。だからあなたのネットワークを確認する必要があります。

あなたのアプリケーションに関する詳細情報が必要になると思います。それに基づいて私はさらに支援を提供することができます。

+0

うん、私は環境変数を初期化してきました。 Queuemangerは別のサーバーにあり、キューマネージャが展開/インストールされたためにサーバーがシャットダウンしたため、queuemanagerが停止しました。 –

+0

下記のMoragの貴重なコメントを参照してください。 – Shashi

+0

彼女のコメントを確認しました。ほとんどの場合、ネットワークのタイムアウト問題と思われます。しかし、私はそれをどのように識別することができますか? –

2

クライアントとサーバーの通信を実行しているときに、ネットワークが関与しているとします。キュー・マネージャーが使用できなくなったときのアプリケーションの検出時間は、アプリケーションがその時点で行っていたものと、キュー・マネージャーがどのように終了したかによって異なります。

キューマネージャが静止していて、その時点でアプリケーションがキューマネージャ接続を使用していた場合は、すぐに通知する必要があります。同様に、接続例外ハンドラーがある場合、アプリケーションがその時点でキュー・マネージャー接続を使用していない場合でも、例外ハンドラーはそのようにカウントされ、即時通知を受け取る必要があります。あなたが提供するコードのスニペットは、おそらくあなたが待ち行列に入っていることを暗示していることを示唆しています。

キューマネージャが静止よりも厳しく停止した場合は、ネットワークタイムアウトを使用して、キューマネージャがソケットのもう一方の端にないことを検出する必要があります。これが遅延の原因になります見た。

キューマネージャーがどのように終了したか、例外ハンドラがあるかどうか、またはキューマネージャーがダウンしたときにアプリケーションが実際に接続を使用していたかどうかを指定できますか。

IBM MQのバージョンとSVRCONNチャネルの詳細、特にSHARECNVとHBINTで質問を更新することもできますか?

+0

MQバージョン7.5.0.0 MQのコンシューマ(他のベンダーが扱うMQサーバサービス)によってのみ、このような詳細がわかります キューマネージャがあるサーバをシャットダウンしてキューマネージャを停止しました。 –

+0

この方法でキューマネージャを終了するのが通常の方法ですか、これは例外的な状況ですか? MQチャネルをチューニングして、壊れたソケットを早期に検出することはできますが、一般的な実行コストは犠牲になります。これが通常の場合、キュー・マネージャーを閉じることですが、より優雅な方法でベンダーにそれを終了させることはできませんか? –

0

MQクライアントは、TCP接続タイムアウトのためにMQキューがダウンしていることを理解するのに時間がかかります。 MQクライアントがWindowsサーバーにインストールされている場合は、Windows OSのTCPタイムアウト設定に基づいて一定の時間待機します。

MQclientのTCPタイムアウトを処理したい場合は、インストールされているMQの場所、つまりC:/ ..にあるmqclient.iniから実行できます。/ IBM/Webshperemq

http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.con.doc/q016840_.htm