我在将一些数据放入回复队列时遇到以下错误。我的应用程序流程是我有一个 MQ 监听器(Spring Boot 容器),它持续监听 REQ 队列并处理 REQ 队列上收到的数据,最后将处理后的数据放入 REPLY 队列。
就我而言,在一定数量的请求和回复流之后在 REP 队列上发送数据时会出现问题,我确信当它达到最大句柄计数时,这个问题就会开始出现。为了进行临时修复,现在我正在重新启动 MQ Listener 容器。
有人可以帮助我在哪里检查 MAXHANDS 计数(我假设它在 MQ 端配置),并且有什么方法可以在重现问题的计数后检查吗?
注意:我正在使用 IBMMQ,所有队列基础设施均由 MQ 团队管理。
错误详细信息:
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2017' ('MQRC_HANDLE_NOT_AVAILABLE').
非常感谢立即提供帮助。
public class MessageHandlerImplRCC implements SessionAwareMessageListener {
@Override public void onMessage(Message message, Session session) {
TextMessage imbMqReplyMessage = session.createTextMessage();
imbMqReplyMessage.setJMSMessageID(message.getJMSMessageID());
imbMqReplyMessage.setJMSCorrelationID(message.getJMSMessageID());
imbMqReplyMessage.setText(dlmToDemiMappedString);
MessageProducer messageProducerIBM = session.createProducer(message.getJMSReplyTo());
messageProducerIBM.send(imbMqReplyMessage);
message.acknowledge();
}
}
最佳答案
要查看一个任务可以打开多少个句柄,请使用以下 MQSC 命令:-
DISPLAY QMGR MAXHANDS
默认情况下,这是 256。但是,您应该关闭不再使用的句柄,而不是增加此值。
发出以下 MQSC 命令来查找您的连接。
DISPLAY CONN(*) TYPE(CONN) APPLTAG
并在 APPLTAG
字段中查找您的应用程序名称,然后复制 CONN
值并发出以下 MQSC 命令:
DISPLAY CONN(paste-in-conn-value) TYPE(ALL)
您将看到您已打开的所有队列。如果您认为不需要将它们全部打开,请关闭不需要的那些,例如使用:-
messageProducerIBM.close();
重新启动监听器会产生将它们全部关闭的效果,这会将句柄数设置回零。
关于java - IBM MQ 调用失败,代码为 '2' ('MQCC_FAILED' ),原因为 '2017' ('MQRC_HANDLE_NOT_AVAILABLE' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59525426/