5

当快速修复启动器在startTime(在配置中定义)重新连接时,它会删除带有序列号的文件,但未设置ResetSeqNumFlagY,并且服务器回复一条Logout消息,其中包含文本“seq msg number to low ...”ResetSeqNumFlag = Y只针对这种行为?我不想在每次登录时重置序列。

4

3 回答 3

11

这似乎是 QuickFIX/J 的一个怪癖(有些人可能认为这是一个错误)。如果 ResetOnLogon=N 则在会话开始时间触发登录时不发送 ResetSeqNumFlag=Y。如果 ResetOnLogon=Y,则每次登录时都会发送 ResetSeqNumFlag=Y。我相信这在实践中不是一个大问题,因为 FIX 会话中的参与者通常会在会话结束后在本地重置他们的序列号(逻辑上在结束时间结束,而不是连接断开)。

如果您想稍微修改源代码以实现此行为,您需要修改 quickfix.Session next() 方法。您可以添加一个本地标志,指示会话已重新启动(根据由 checkSessionTime() 确定的计划)。将该标志传递给 generateLogon() 并且该方法将使用它来确定何时发送 ResetSeqNumFlag=Y 而不管 ResetOnLogon 配置如何。

于 2013-10-09T10:17:10.160 回答
1

我不想在每次登录时重置序列。

然后不要这样做!设置ResetOnLogon=N

在 StartTime,会话将始终重置序列号。如果ResetOnLogon=N,那么它们将在下一个 StartTime 之前再次重置。

发起者和接受者应该总是有匹配的ResetOnXXX设置。

于 2013-10-08T17:39:57.117 回答
0

你所要求的不能,不应该做。您使用一些配置启动引擎,然后在运行时更改配置。如果出现问题,将很难确定问题的根源。

而不是ResetSeqNumFlag = Y尝试ResetOnLogon=Y在您的配置中添加接受方(也就是说,如果您可以控制它)或ResetOnLogout=Y/ResetOnDisconnect=Y在您的启动器配置文件中。这会容易得多,并且在运行时更改配置可能不是最好的解决方案。

您的注销(随时可能发生断开连接)无论如何都会在 EndTime 发生,并且对您的应用程序来说应该更容易。

于 2013-10-08T16:28:43.513 回答