Java MQ连接没有断开

Java MQ连接没有断开,java,jms,ibm-mq,mq,Java,Jms,Ibm Mq,Mq,我们已经实现了一个JMSExceptionListener,可以在任何连接异常上调用它。在这个方法中,我们使用connection.close()关闭连接。当我们这样做时,我们得到以下异常 javax.jms.JMSException: MQJMS2003: failed to disconnect queue manager. at com.ibm.msg.client.wmq.v6.jms.internal.ConfigEnvironment.newException(ConfigE

我们已经实现了一个JMSExceptionListener,可以在任何连接异常上调用它。在这个方法中,我们使用connection.close()关闭连接。当我们这样做时,我们得到以下异常

javax.jms.JMSException: MQJMS2003: failed to disconnect queue manager.
    at com.ibm.msg.client.wmq.v6.jms.internal.ConfigEnvironment.newException(ConfigEnvironment.java:374)
    at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.close(MQSession.java:1328)
    at com.ibm.msg.client.jms.internal.JmsSessionImpl.close(JmsSessionImpl.java:492)
    at com.ibm.msg.client.jms.internal.JmsConnectionImpl.close(JmsConnectionImpl.java:294)
    at com.ibm.mq.jms.MQConnection.close(MQConnection.java:98)
因此,连接处于挂起状态,即使我们进行了新的连接,消息也将处于未编写状态。有没有更干净的方法来关闭连接而不出现此异常

设置setClientReconnectOptions在这种情况下会有帮助吗?请告知


是否有方法对连接对象进行运行状况检查?如何知道连接对象是否过时?

我可以建议您不要使用PROVDER\u版本6或shareconv=0通道。。。那..wmq.v6。。这意味着JMS客户端正在其迁移模式下运行。如果提供程序版本7sharecnv已设置为0,您可能会获得更好的行为。但是这个错误发生在连接被防火墙后面的MQ服务器删除之后。因此,在我的pom中,我看到mqjms jar的版本是7.0.1.5版本,来自@Calanis的建议是不要使用sharecnv=0,也不要使用PROVIDER_版本6。即使您的jar版本是7.0.1.5,您仍然可以像现在这样使用PROVIDER_版本6。将PROVIDER_VERSION改为7。我还建议您升级到更新的Java客户机(mqjms jar)。IBM于2011年4月发布了7.0.1.5,这是近4年前的事了!7.0.1.12是最新版本,包含数百个修复程序。Java客户端是MQC7客户端支持包的一部分,您可以在此处下载: