MQ版本7.5.0.4
有没有办法在连接丢失时收到通知。我能做什么我只在达到超时时才会收到错误。 (JMSWMQ1107: A problem with this connection has occurred.
)
mqcf.setConnectionNameList(host); // "host1(1414),host2(1414)";
mqcf.setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT);
mqcf.setClientReconnectTimeout(100); // seconds
ExceptionListener exceptionListener = new ExceptionListener(){
@Override
public void onException(JMSException e) {
System.out.println(e.getErrorCode() + " " + e.getMessage());
}
};
// need to reconnect on exception..!
connection.setExceptionListener(exceptionListener);
答案 0 :(得分:2)
使用异常监听器进行事件(甚至重新连接)超出了JMS规范的范围。严格的定义是,只应在连接断开时触发 - 并且正确的操作过程是重新创建连接。 (请注意,包含的各种供应商MQ确实提供了扩展 - 所以总是值得提高要求!)
在这里的JavaSE环境中,可以设置自动重新连接。在不受支持的托管环境中,您实际上必须侦听断开的连接,然后应用程序需要重新创建createConnection()。然后“walked”找到一个正在运行的QM。
答案 1 :(得分:1)
使用链接的异常获取更多详细信息。在我的测试中,我结束了没有重新连接选项的队列管理器,因此是MQRC 2161原因代码。
代码:
@Override
public void onException(JMSException e) {
System.out.println(e);//e.getErrorCode() + " " + e.getMessage());
if(e.getLinkedException() != null)
System.out.println(e.getLinkedException());
}
异常详情。
com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ1107: A problem with this connection has occurred.
An error has occurred with the WebSphere MQ JMS connection.
Use the linked exception to determine the cause of this error.
com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2161' ('MQRC_Q_MGR_QUIESCING').