我在AIX服务器部署在OC4J一个简单的JMS应用程序,在我的应用我在听一些队列,并发送到下AS400服务器上部署一个WebSphere MQ其他队列。

的问题是,我的这些队列的连接被终止/时它保持空闲了一段时间,并显示错误MQJMS1016关闭的(这是没有问题的),然后这种情况发生时,我试图恢复连接和它的工作原理,但是,旧的连接粘贴在MQ和不会终止,直到它被手动终止。

在恢复代码变为如下:

public void recover() {
    cleanup();
    init();
}

public void cleanup(){
    if (session != null) {
        try {
            session .close();
        } catch (JMSException e) {
        }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (JMSException e) {
        }
    }
}

public void init(){
    // typical initialization of the connection, session and queue...
}
有帮助吗?

解决方案 2

由于孤立的连接(在MQ侧卡住连接)不影响消息处理(即,它们不消耗消息),我们留下的东西,因为它是直到允许的MQ最大连接数达到。

在恢复没有工作了,一旦我们达到这一点,在MQ管理员必须手动清理孤立连接,然而,好消息是,寻找这方面的问题导致了报道IBM支持网站的一个问题:

检查这里

其他提示

在MQJMS1016是一个内部错误和表示连接损失是由于一些错误代码或WMQ本身。调整渠道将帮助,但你真的需要去的问题,为什么应用程序被喷涌孤立足够快,以耗尽所有可用通道的连接。

我想要做的第一件事是检查WMQ的和正在运行的WMQ客户端的版本。如果这是新开发的,请确保您使用的是WMQ V7客户端,因为V6是2011年九月的结束生命的V7客户机的工作原理与V6 QMgrs,直到你能够升级为好。一旦你到V7客户机和QMGR,也有相当多的频道调谐和重新连接选项提供给您。

在WMQ V7客户端下载是在这里: http://bit.ly/bXM0q3

而且,注意,在代码中重新连接逻辑上面并没有尝试之间睡觉。如果客户端在速度的高速抛出的连接请求,它可以重载WMQ监听器和执行非常有效的DOS攻击。建议尝试之间休眠几秒钟。

最后,请你,请打印您的JMSException catch块链接例外。如果你有一个JMS传输提供一个问题,链接的异常的JMS会包含任何低级错误信息。在WMQ的情况下,它包含原因代码如2035 MQRC_AUTHORIZATION_ERROR或2033 MQRC_NO_MSG_AVAILABLE。下面是一个例子:

try {
  .
  . code that might throw a JMSException
  .
} catch (JMSException je) {
  System.err.println("caught "+je);
  Exception e = je.getLinkedException();
  if (e != null) {
    System.err.println("linked exception: "+e);
  } else {
    System.err.println("No linked exception found.");
  }
}

如果你在凌晨2点的误差一些夜晚,你的WMQ管理员会感谢你的链接例外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top