2016-12-08 138 views
2

com.ibm.mq.MQQueue#put(MQMessage,MQPutMessageOptions)と呼ぶと、ハングすることがあります。このメソッドのタイムアウトを設定するにはどうすればよいですか? 同じ質問がありますIBM MQの設定タイムアウト

答えて

2

SHARECNVが1以上のSVRCONNチャネルを使用しているMQ v7.0以降では、Java用のIBM MQクラスまたはJMS用のIBM MQクラスがPUTでエラーを返す時間を短縮できます。 SVRCONNのHBINTをより低い値に設定することによってネットワークの問題の結果。タイムアウトは、以下の式を用いてHBINTに基づいている:

  • HBINTである場合に60未満:HBINT * 2
  • HBINTは60以上である場合:HBINT + 60

SVRCONNチャンネルのデフォルトHBINTは300秒ですので、6分のタイムアウトになります。私はこの値を15などのより低い値に設定したいのですが、30秒のタイムアウトがあります。

Java用のIBM MQクラスとJMS用のIBM MQクラスは、接続の詳細がプログラムまたはJNDIによって指定されている場合、キューマネージャのSVRCONNチャネルでHBINTセットを採用します。

チャネルテーブルJava/JMS を指す場合、チャネルテーブルのCLNTCONN HBINTを使用すると、最後のHBINTはCLNTCONNとSVRCONNの間で最も高い値になります。たとえば、CLNTCONNチャネルが15に設定され、SVRCONNがデフォルトの300に設定されている場合、最終的なHBINTは300になります。

2

MQGMO_WAITオプションとWaitIntervalがあり、Get呼び出しが一定の時間待機するように設定できます。たとえば、次のスニペットではGet呼び出しを3秒間待機します。

 MQGetMessageOptions gmo = new MQGetMessageOptions(); 
     gmo.Options = MQConstants.MQGMO_WAIT; 
     gmo.WaitInterval = 3000; 

     mqQueue.Get(mqMessage, gmo); 

プットコールのタイムアウトを設定するオプションはありません。何か問題があれば、Putコールはエラーを返します。

UPDATE:プットコールが呼び出されると

、キュー・マネージャへの接続がすでに確立されています。接続に問題がある場合、PutコールはTCPスタックがそのような問題を通知するとすぐに戻ります。このようなTCPレベルの問題は、システム上で実行されているすべてのアプリケーションに影響するため、チューニングはアプリケーションレベルではなく、システムレベルで行う必要があります。また、socket.write呼び出しのタイムアウトを設定することもできないと思います。

MQは、キューマネージャへの接続を確立するためのタイムアウトを設定する方法を提供します。 mqclient.iniにconnection_timeoutパラメータがあり、タイムアウトを設定できます。

+0

Putは少なくともTCPタイムアウトに対してハングアップする可能性がありますか?そして、TCPタイムアウトを短くする方法はありませんか? –

+0

私の更新を見てください。 – Shashi