MQ JMS重新连接 - 异常监听器

时间:2014-10-15 22:06:10

标签: ibm-mq

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);

2 个答案:

答案 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').