在我下面connect()
的代码中,方法能够捕获 2009 和 2059 异常。但是,当我关闭队列管理器或连接以在getMessage()
方法中生成 2009 或 2059 MQ 异常时,程序挂起或没有抛出它。它正在排队等候queue.get(retrievedMessage, getOptions);
。
如果连接或队列管理器损坏,我们是否需要添加额外的打开选项以使代码知道?
连接() {`MQEnvironment.hostname = 主机名; MQEnvironment.channel = 通道名称; MQEnvironment.port = 端口名称; 尝试 { qMgr = 新 MQQueueManager(EvtqManager); // 定义一个队列管理器对象 LOGGER.debug("队列管理器 " +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; 获取消息(); } 抓住(){ 如果(MQex.reasonCode==2009 || MQex.reasonCode==2059){ 关闭(); 连接(); } }
获取消息(){ MQMessage 检索消息; 而(真){ 尝试 { 检索消息 = 新 MQMessage(); queue.get(retrivedMessage, getOptions); PCFMessage pcfMessage = new PCFMessage(retrivedMessage); } 捕捉(MQException MQex){ 如果(MQex.reasonCode==2009 || MQex.reasonCode==2059){ 关闭(); 连接(); } } }