gpt4 book ai didi

java - 使用 JMS 的 Websphere MQ,关闭的连接卡在 MQ 上

转载 作者:行者123 更新时间:2023-11-30 07:38:55 24 4
gpt4 key购买 nike

我在 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...
}

最佳答案

MQJMS1016 是一个内部错误,表示连接丢失是由于代码或 WMQ 本身有问题造成的。调整 channel 会有所帮助,但您确实需要解决以下问题:为什么该应用会以足够快的速度产生孤立连接以耗尽所有可用 channel 。

我要做的第一件事是检查正在运行的 WMQ 和 WMQ 客户端的版本。如果这是新开发,请确保您使用的是 WMQ v7 客户端,因为截至 2011 年 9 月,v6 已停产。v7 客户端可与 v6 QMgrs 一起使用,直到您也可以对其进行升级。一旦您使用了 v7 客户端和 QMgr,就会有相当多的 channel 调整和重新连接选项可供您使用。

WMQ v7 客户端下载地址:http://bit.ly/bXM0q3

另请注意,上面代码中的重新连接逻辑不会在两次尝试之间 hibernate 。如果客户端以高速抛出连接请求,它可以使 WMQ 监听器过载并执行非常有效的 DOS 攻击。建议在两次尝试之间睡几秒钟。

最后,请在您的 JMSException 捕获 block 中打印链接的异常。如果 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 管理员会感谢您提供链接的异常。

关于java - 使用 JMS 的 Websphere MQ,关闭的连接卡在 MQ 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com