Details
Description
I have a problem that QuickFIXJ stops sending the heartbeat. Please see the QuickFIXJ log below.
The heartbeat interval is set to 4.
20150127-01:01:34: 8=FIXT.1.19=7535=034=318541128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:34.78910=197
20150127-01:01:36: 8=FIXT.1.19=9535=034=3237749=TMSQ03226252=20150127-01:01:36.80256=TR MATCHING57=FXM142=TRFXMJP53776xxx10=130
20150127-01:01:38: 8=FIXT.1.19=7535=034=318551128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:38.89910=204
20150127-01:01:41: 8=FIXT.1.19=9535=034=3237849=TMSQ03226252=20150127-01:01:41.73956=TR MATCHING57=FXM142=TRFXMJP53776xxx10=136
----- After this time FIXQuickJ stops sending the heartbeart ---- only receive the heartbeat from other side. ----
20150127-01:01:42: 8=FIXT.1.19=7535=034=318561128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:42.96410=193
20150127-01:01:50: 8=FIXT.1.19=7535=034=318571128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:47.03910=192
20150127-01:01:51: 8=FIXT.1.19=9035=134=318581128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:48.063112=HBTO-3185810=242
20150127-01:01:52: 8=FIXT.1.19=7535=034=318591128=949=TR MATCHING56=TMSQ03226252=20150127-01:01:52.12910=190
------ It seems that FIXQuickJ received heartbeat and testrequest but FIXQuickJ does not process them as QuickFIXJ send the testrequest to other side. -----
20150127-01:01:51: 8=FIXT.1.19=10435=134=3237949=TMSQ03226252=20150127-01:01:51.89656=TR MATCHING57=FXM142=TRFXMJP53776xxx112=TEST10=200
------ The other side disconnect because it does not receive heartbeat -------
Do you have any idea why QuickFIXJ stops sending the heartbeat and also does not process the message from other side.
Hi,
a heartbeat is no application message. An ExecutionReport/NewOrderSingle/... are application messages. However, you said that only heartbeats were received.
Regarding your initial log output in the issue description: you say that the engine does receive Heartbeats/TestRequests but does not answer them. So I would change the fromAdmin method of your application to check if the received message is a TestRequest. If yes, then create a stack trace and/or check for deadlocked threads. This can be achieved with some MBeans which are included in Java6 and up (ManagementFactory.getThreadMXBean())
Moreover, when I look at the log there seems to be a problem with the times. E.g. the first messages arrive in time (comparing the log time stamp and field 52/SendingTime). However, afterwards there is a gap of about three seconds. So this either means your network is flaky or the application/computer is heavily loaded and does not get the messages in time.