为什么我的 Acceptor 在接收到 Heartbeat 后仍然断开连接?

Why is my Acceptor disconnecting even after it receives a Heartbeat back like it should?

使用 QuickFIX/J 1.6.3

我的 QuickFIX/J 接受器出现这种奇怪的行为,我完全不知道为什么。我的接受者正在发送一个测试请求,期待一个心跳,发起者向我发送一个心跳,但我的接受者正在断开连接说:

Timed out waiting for heartbeat

当 Initiator 尝试登录而 Acceptor 不允许它说时,情况变得更加奇怪

Multiple logons/connections for this session are not allowed

您可以在下面的事件和消息日志中看到它。非常感谢任何帮助。

此外,我的 Acceptor 具有配置 CheckLatency=N。我这样做是因为 Initiator 的 SendingTime 稍微落后于我的。

事件日志:

20170321-17:22:48: Session FIX.4.2:MY_COMP_ID->MY_CUSTOMER_COMP_ID schedule is weekly, SUN 00:00:00-UTC - SAT 23:00:00-UTC

20170321-17:22:48: Created session: FIX.4.2:MY_COMP_ID->MY_CUSTOMER_COMP_ID

20170321-17:25:31: Accepting session FIX.4.2:MY_COMP_ID->MY_CUSTOMER_COMP_ID from /x.x.x.x:yyyy

20170321-17:25:31: Acceptor heartbeat set to 60 seconds

20170321-17:25:31: Logon contains ResetSeqNumFlag=Y, resetting sequence numbers to 1

20170321-17:25:31: Received logon

20170321-17:25:31: Responding to Logon request

20170321-17:47:49: Sent test request TEST

20170321-17:48:43: Disconnecting: Timed out waiting for heartbeat

20170321-17:48:50: Accepting session FIX.4.2:MY_COMP_ID->MY_CUSTOMER_COMP_ID from /x.x.x.x:yyyy

20170321-17:48:50: Acceptor heartbeat set to 60 seconds

20170321-17:49:21: Multiple logons/connections for this session are not allowed

20170321-17:49:51: Multiple logons/connections for this session are not allowed

20170321-17:50:22: Multiple logons/connections for this session are not allowed

20170321-17:55:31: Multiple logons/connections for this session are not allowed

20170321-17:56:01: Multiple logons/connections for this session are not allowed

20170321-17:56:32: Multiple logons/connections for this session are not allowed

消息日志

8=FIX.4.2 | 9=77 | 35=1 | 34=55 | 49=MY_COMP_ID | 52=20170321-17:47:49.041 | 56=MY_CUSTOMER_COMP_ID | 112=TEST | 10=120 | 

8=FIX.4.2 | 9=78 | 35=0 | 34=229 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:47:34.838 | 56=MY_COMP_ID | 112=TEST | 10=179 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:48:36.583 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=141 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:49:07.034 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=131 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:49:37.469 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=146 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:50:07.952 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=132 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:55:17.035 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=130 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:55:47.502 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=132 | 

8=FIX.4.2 | 9=85 | 35=A | 34=1 | 49=MY_CUSTOMER_COMP_ID | 52=20170321-17:56:17.985 | 56=MY_COMP_ID | 98=0 | 108=60 | 141=Y | 10=145 | 

似乎存在一个 QuickFIX/J 错误,其中心跳计时器和登录状态检查不同步。

这个解决方案并不理想,更像是一种解决方法:

Acceptorsession.cfg 上设置 TestRequestDelayMultiplier=1。这将给引擎更多的时间余地来根据心跳检查登录状态。