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