Quickfix在启动时重置序列号,但未在登录消息中设置ResetSeqNum

时间:2013-10-08 15:51:33

标签: quickfix

当quickfix发起程序在startTime(在config中定义)重新连接时,它会删除序列号为的文件,但不会将ResetSeqNumFlag设置为Y,服务器会回复{带有文本“seq msg number to low ...”的{1}}消息 有没有办法只为此行为设置Logout?我不想在每次登录时重置序列。

3 个答案:

答案 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发生,并且对您的应用来说应该更容易。