以下のコードconnect()
メソッドでは、2009 および 2059 の例外をキャッチできます。しかし、getMessage()
メソッドで 2009 または 2059 MQ 例外を生成するためにキュー マネージャーまたは接続を停止すると、プログラムがハングするか、スローされませんでした。並んでいqueue.get(retrievedMessage, getOptions);
ます。
接続またはキュー マネージャーが壊れている場合にコードに認識させるために、追加の open オプションを追加する必要がありますか?
接続() {`MQEnvironment.hostname = ホスト名; MQEnvironment.channel = channelName; MQEnvironment.port = ポート名; 試す { qMgr = 新しい MQQueueManager(EvtqManager); // キュー マネージャー オブジェクトを定義します LOGGER.debug("Queue Manager " +EvtqManager+ " インスタンスが初期化されました"); int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING+ MQC.MQOO_INPUT_SHARED; queue = qMgr.accessQueue(queueName, openOptions, null,null,null); LOGGER.debug("IBM MQQueue:"+queueName+" にアクセスしました"); getOptions = 新しい MQGetMessageOptions(); getOptions.options = MQC.MQGMO_NO_WAIT; getMessage(); } キャッチ(){ if(MQex.reasonCode==2009 || MQex.reasonCode==2059){ シャットダウン(); 接続(); } }
getMessage(){ MQMessage を取得したメッセージ。 ながら(真){ 試す { retrieveMessage = 新しい MQMessage(); queue.get(retrievedMessage, getOptions); PCFMessage pcfMessage = 新しい PCFMessage(retrievedMessage); } キャッチ (MQException MQex) { if(MQex.reasonCode==2009 || MQex.reasonCode==2059){ シャットダウン(); 接続(); } } }