首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在高负载期间,MQQueueConnectionFactory突然将端口更改为默认端口1414。

在高负载期间,MQQueueConnectionFactory突然将端口更改为默认端口1414。
EN

Stack Overflow用户
提问于 2022-10-11 08:17:00
回答 1查看 47关注 0票数 1

在高负载期间,我们看到MQQueueConnectionFactory突然尝试连接到默认MQ端口1414,而不是指定的端口。

背景:

我们使用Websphere 9.0.5.13来部署ear文件。Java版本: 8.0.7.15。此Websphere中的服务器与外部IBM通信。我们使用IBM库版本: com.ibm.mq.allclient-9.2.5.0.jar。我们连接到3个不同的IBM队列管理器和数百个通道。我们不使用IBM默认端口号,即1414。相反,我们将其覆盖到其他端口。在发送到队列之前,我们总是使用新的MQQueueConnectionFactory,然后关闭发送方、会话和连接。

发行:

在服务器开始时,我们同时处理多个队列。在大多数情况下,这导致:

JMSCMQ0001: IBM调用失败,compcode '2‘('MQCC_FAILED')原因是'2538’('MQRC_HOST_NOT_AVAILABLE')。

更深层次地讲,这是因为MQQueueConnectionFactory试图连接到默认端口1414,而不是我们配置的正确端口。

由: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204:连接到主机'ecpmq2(1414)‘拒绝。[1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9204:与主机'hostname******/ipaddr***...:1414‘的连接被拒绝。[1=java.net.ConnectExceptionA远程主机在超时期间内没有响应。(连接定时out),3=hostname***/ipaddr***...:1414,4=TCP,5=Socket.connect]],3=hostname***(1414),4=,5=RemoteTCPConnection.bindAndConnectSocket] )

我试图在本地PC和我们的测试env中复制这个场景,但没有结果。

示例代码:

这是我们的密码。是的,代码从效率上讲是farcry,但它仍然不能解释为什么MQ突然试图连接到默认端口。

代码语言:javascript
复制
        for (String msg : messages) {
            MQQueueConnectionFactory queueConnectionFactory = null;
            MQQueueConnection mqConn = null;
            try {
                queueConnectionFactory = new MQQueueConnectionFactory();
                queueConnectionFactory.setQueueManager(queueInfo.getQueueManager());
                queueConnectionFactory.setHostName(queueInfo.getHostname());
                queueConnectionFactory.setPort(queueInfo.getPort());
                queueConnectionFactory.setChannel(queueInfo.getChannel());
                queueConnectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
                
                mqConn = (MQQueueConnection) queueConnectionFactory.createQueueConnection();
                mqConn.start();
                sendSingleMsg(mqConn, queueInfo.getQueueName(), msg);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                printQueueDetails(queueConnectionFactory);
            } finally {
                if (mqConn != null) {
                    try {
                        mqConn.close();
                    } catch (JMSException ex) {
                        log.error(ex.getMessage(), ex);
                    }
                    mqConn = null;
                }
            }
        }

问题:

是否可能由于高度并发性导致MQQueueConnectionFactory在某个地方失败,并将端口设置为默认端口而不是指定的端口?它是否保留了一些故障转移主机名,并包括默认端口?

EN

回答 1

Stack Overflow用户

发布于 2022-10-11 13:47:33

原因之一可能是没有测试什么

代码语言:javascript
复制
queueInfo.getPort()

退货。我会记录返回,看看是否有条件,当它没有返回您期望的端口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74025031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档