在我下面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){
关闭();
连接();
}
}
}
`