La session IBM MQ se déconnecte
Je crée un auditeur MQ comme celui-ci et cela fonctionne bien, mais après des minutes ou des heures, il se déconnecte avec cette exception. Je ne contrôle pas le serveur. C'est sur un circuit dédié, pas sur Internet. Je doute que ce soit un problème de réseau. D'autres services fonctionnent sur le même circuit sans problème.
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
QueueConnection qc;
Queue queue;
QueueSession queueSession;
QueueReceiver qr;
public void init() throws JMSException, IOException {
cf.setQueueManager(" ");
cf.setCCDTURL(Path.of(getCcdt()).toUri().toURL());
cf.setSSLPeerName(getSslPeerName());
qc = cf.createQueueConnection();
qc.setExceptionListener(new ExceptionListener() {
@Override
public void onException(JMSException exception) {
log.error(exception);
}
});
queue = new MQQueue(cp.getMqQueue());
queueSession = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
qr = queueSession.createReceiver(queue);
qr.setMessageListener(this);
qc.start();
}
exception:
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ1107: A problem with this connection has occurred.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:595) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:217) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:273) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.consumer(WMQAsyncConsumerShadow.java:686) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.callConsumer(RemoteProxyQueue.java:3755) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.processEvent(RemoteProxyQueue.java:4824) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.driveConsumer(RemoteProxyQueue.java:4645) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.deliverMsgs(RemoteProxyQueue.java:5240) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.deliverMsgsReconnectable(RemoteDispatchThread.java:557) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.deliverMsgs(RemoteDispatchThread.java:531) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.run(RemoteDispatchThread.java:305) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:319) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:99) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:343) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:312) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
at com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1227) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2009' ('MQRC_CONNECTION_BROKEN').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203) ~[com.ibm.mq.allclient-9.2.0.0.jar:9.2.0.0 - p920-L200710.DE]
grep -C 0 -i -a etHeartbeatInterval mq.log
[2:30:37.720.09] 00000065 @16c85cc4 c.i.mq.exits.MQCD ----+----+----+----+---- d setHeartbeatInterval(int) setter [10(0xa)]
--
[2:30:37.721.0X] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+--- d setHeartbeatInterval(int) setter [10(0xa)]
--
[2:30:37.795.1J] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d getHeartbeatInterval() getter [10(0xa)]
[2:30:37.795.1K] 00000065 @7b481be3 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- { setHeartbeatInterval(int,boolean) [10(0xa)] [false]
[2:30:37.795.1L] 00000065 @7b481be3 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- } setHeartbeatInterval(int,boolean)
--
[2:30:37.807.0N] 00000065 @43212202 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- { getHeartbeatInterval(boolean) [true]
[2:30:37.807.0O] 00000065 @43212202 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- } getHeartbeatInterval(boolean) returns [300(0x12c)] Integer
[2:30:37.807.0P] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d getHeartbeatInterval() getter [10(0xa)]
[2:30:37.807.0Q] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d setHeartbeatInterval(int) setter [300(0x12c)]
--
[2:30:37.811.01] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d getHeartbeatInterval() getter [300(0x12c)]
--
[2:30:37.811.03] 00000065 @a5146c3 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- { setHeartbeatInterval(int,boolean) [300(0x12c)] [true]
--
[2:30:37.811.05] 00000065 @a5146c3 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- } setHeartbeatInterval(int,boolean)
--
[2:30:37.817.10] 00000067 @71ff40ae c.i.mq.exits.MQCD ----+- d getHeartbeatInterval() getter [300(0x12c)]
--
[2:30:37.826.0F] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d getHeartbeatInterval() getter [300(0x12c)]
[2:30:37.826.0G] 00000065 @38eff414 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- { setHeartbeatInterval(int,boolean) [300(0x12c)] [true]
[2:30:37.826.0H] 00000065 @38eff414 c.i.m.j.remote.rfp.RfpID ----+----+----+----+---- } setHeartbeatInterval(int,boolean)
--
[2:30:37.838.0X] 00000065 @71ff40ae c.i.mq.exits.MQCD ----+----+----+----+---- d getHeartbeatInterval() getter [300(0x12c)]
[2:30:37.838.0Y] 00000065 @1bb7bbb4 c.i.m.j.remote.impl.RemoteTCPConnection ----+----+----+----+---- { protocolSetHeartbeatInterval(int) [300(0x12c)]
[2:30:37.838.0Z] 00000065 @1bb7bbb4 c.i.m.j.remote.impl.RemoteTCPConnection ----+----+----+----+---- } protocolSetHeartbeatInterval(int)
--
[2:30:37.948.1A] 00000065 @22b76f8e c.i.mq.exits.MQCD ----+----+----+---- d setHeartbeatInterval(int) setter [10(0xa)]
--
[2:30:37.957.0C] 00000065 @716fc5e c.i.mq.exits.MQCD ----+----+----+----+--- d setHeartbeatInterval(int) setter [10(0xa)]
--
[2:30:37.958.1T] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+-- d setHeartbeatInterval(int) setter [10(0xa)]
--
[2:30:38.039.0K] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d getHeartbeatInterval() getter [10(0xa)]
[2:30:38.039.0L] 00000065 @1cf5776d c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- { setHeartbeatInterval(int,boolean) [10(0xa)] [false]
[2:30:38.039.0M] 00000065 @1cf5776d c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- } setHeartbeatInterval(int,boolean)
--
[2:30:38.052.0O] 00000065 @3ed71710 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- { getHeartbeatInterval(boolean) [true]
[2:30:38.052.0P] 00000065 @3ed71710 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- } getHeartbeatInterval(boolean) returns [300(0x12c)] Integer
[2:30:38.052.0Q] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d getHeartbeatInterval() getter [10(0xa)]
[2:30:38.052.0R] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d setHeartbeatInterval(int) setter [300(0x12c)]
--
[2:30:38.056.02] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d getHeartbeatInterval() getter [300(0x12c)]
[2:30:38.056.03] 00000065 @218f5897 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- { setHeartbeatInterval(int,boolean) [300(0x12c)] [true]
[2:30:38.056.04] 00000065 @218f5897 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- } setHeartbeatInterval(int,boolean)
--
[2:30:38.061.00] 00000069 @4c4e13bb c.i.mq.exits.MQCD ----+- d getHeartbeatInterval() getter [300(0x12c)]
--
[2:30:38.072.0I] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d getHeartbeatInterval() getter [300(0x12c)]
[2:30:38.072.0J] 00000065 @5d299189 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- { setHeartbeatInterval(int,boolean) [300(0x12c)] [true]
[2:30:38.072.0K] 00000065 @5d299189 c.i.m.j.remote.rfp.RfpID ----+----+----+----+--- } setHeartbeatInterval(int,boolean)
--
[2:30:38.085.02] 00000065 @4c4e13bb c.i.mq.exits.MQCD ----+----+----+----+--- d getHeartbeatInterval() getter [300(0x12c)]
[2:30:38.085.03] 00000065 @51b68e6a c.i.m.j.remote.impl.RemoteTCPConnection ----+----+----+----+--- { protocolSetHeartbeatInterval(int) [300(0x12c)]
--
[2:30:38.085.05] 00000065 @51b68e6a c.i.m.j.remote.impl.RemoteTCPConnection ----+----+----+----+--- } protocolSetHeartbeatInterval(int)
Les déconnexions apparaissent soit après 90 minutes, soit environ 50 minutes:
15:28 start
16:59 restart (90 min)
17:55 restart (55 min)
18:51 restart (54 min)
19:47 restart (56 min)
3:06 start
4:47 restart (90 min)
5:38 restart (50 min)
6:34 restart (56 min
7:25 restart (50 min)
8:21 restart (55 min)
9:57 restart (95 min)
10:48 restart (50 min)
11:39 restart (51 min)
12:30 restart (51 min)
13:26 restart (56 min)
14:22 restart (56 min)
15:13 restart (51 min)
La capture de paquets ressemble à ceci. Voir n ° 162, j'ai envoyé un paquet TLS, puis 9 retrans, puis déconnecté 60 secondes après l'envoi du n ° 162.
192.168.77.102 = me (MQ JMS client)
192.168.77.1 = router(next hop)
160.43.166.189 = MQ server
Réponses
Le fournisseur de services a dû définir HBINT (30) de son côté pour résoudre le problème. Très étrange qu'ils n'aient pas déjà eu ce correct compte tenu de l'organisation de nombreuses sessions.