当快速修复启动器在startTime
(在配置中定义)重新连接时,它会删除带有序列号的文件,但未设置ResetSeqNumFlag
为Y
,并且服务器回复一条Logout
消息,其中包含文本“seq msg number to low ...”ResetSeqNumFlag = Y
只针对这种行为?我不想在每次登录时重置序列。
3 回答
这似乎是 QuickFIX/J 的一个怪癖(有些人可能认为这是一个错误)。如果 ResetOnLogon=N 则在会话开始时间触发登录时不发送 ResetSeqNumFlag=Y。如果 ResetOnLogon=Y,则每次登录时都会发送 ResetSeqNumFlag=Y。我相信这在实践中不是一个大问题,因为 FIX 会话中的参与者通常会在会话结束后在本地重置他们的序列号(逻辑上在结束时间结束,而不是连接断开)。
如果您想稍微修改源代码以实现此行为,您需要修改 quickfix.Session next() 方法。您可以添加一个本地标志,指示会话已重新启动(根据由 checkSessionTime() 确定的计划)。将该标志传递给 generateLogon() 并且该方法将使用它来确定何时发送 ResetSeqNumFlag=Y 而不管 ResetOnLogon 配置如何。
我不想在每次登录时重置序列。
然后不要这样做!设置ResetOnLogon=N
。
在 StartTime,会话将始终重置序列号。如果ResetOnLogon=N
,那么它们将在下一个 StartTime 之前再次重置。
发起者和接受者应该总是有匹配的ResetOnXXX
设置。
你所要求的不能,不应该做。您使用一些配置启动引擎,然后在运行时更改配置。如果出现问题,将很难确定问题的根源。
而不是ResetSeqNumFlag = Y
尝试ResetOnLogon=Y
在您的配置中添加接受方(也就是说,如果您可以控制它)或ResetOnLogout=Y
/ResetOnDisconnect=Y
在您的启动器配置文件中。这会容易得多,并且在运行时更改配置可能不是最好的解决方案。
您的注销(随时可能发生断开连接)无论如何都会在 EndTime 发生,并且对您的应用程序来说应该更容易。