quickfixj启动器获取断开连接:尝试登录到接受器时遇到END_OF_STREAM。我们使用供应商的修复引擎作为接受者。来自接受者的反馈是,xxxx的登录请求未被接受,传入太小,期望305,收到27。
我阅读了quickfix文档,但没有确切地知道序列号不匹配的正确解决方案。据我所知,如果我断开连接,我的发起人将发送一个35 = 4用于重新发送发起方seqnum,要求接受方重新发送消息并填补空白。 但在什么情况下,如果发起者发送较低的seqnum将被接受者拒绝并拒绝连接? 以及处理这种拒绝和重新连接的正确程序是什么?为了不丢失任何信息,双方应如何进行重置并填补空白? 如果发起者和接受者之间存在中断,建议的解决方案是什么,以使消息保持同步而不会丢失任何消息?
答案 0 :(得分:1)
由于您的问题的第一句话,我想向您展示answer to the same error message users.credibility = if ( (users.credibility + 100) > 1000, 1000
,if((users.credibility + 100)<0, 0,users.credibility + 100))
。引用了{em> bhageera 的blog post。
最后,原因很愚蠢……我连接到的交易对手每个用户/密码只允许1个连接(即使用这些凭据进行会话)。事实证明,存在另一个针对相同TargetCompID使用相同凭据的应用程序。该应用程序一被杀死,当前的应用程序就可以正常登录。
我花了一段时间寻找bug的原因,直到意识到我有两个具有相同凭据的启动器在两个不同的测试环境上运行。
答案 1 :(得分:0)
根据QuickfixJ中的默认逻辑: QuickfixJ管理2个序列号,expectedSeqNum接收(targetSeqNum)和nextSeqNumber以发送。
针对收到的SeqNum检查下一个预期目标SeqNum。如果检测到不匹配,请应用以下逻辑:
在您收到的情况下,收到的信息低于预期,因此会断开连接。
收到高于预期的SeqNum的原因: 接收方错过了一些消息,因此可能是正常情况。
低于预期的SeqNum(您的情况)的原因: 其中一个交易对手重置其序列号,预计不应该由两个交易对手同意。
在正常情况下,每当您错过该消息时,您将收到更高的号码,并由QuickFixJ管理。