首页 > 解决方案 > 修复协议并使用交错的实时消息重新发送?

问题描述

当我们收到与新/新消息交错的重发消息时,修复(即快速修复)客户端的正确行为是什么?

我有一种情况,我们在登录时检测到大量丢失的消息,msgseqnum 比预期的要高。
发起者发出重新发送(开放式)。
接收到新的/未经请求的消息并将其放入队列中。

有趣的部分在收到第一个错过的修复消息后开始,(第一个重发消息,34 = BeginSeqNo)

当这种情况发生时,我们的 quickfixn 发起方进入某种模式并考虑重新发送完成(或其他),当我们在许多重新发送的消息后不久收到一条新的/未经请求的消息,该消息与重新发送流交错时,我们的发起方将发送一个新的重发。

这个序列继续下去,我们最终会遇到大量的并发重新发送,并且每个重新发送的消息都充满了网络。

由接受者交错实时和重新发送提要是否正确?

在这种情况下,quickfixn 发起者是否应该再次发送重新发送?
(没有“重新发送完成”消息,所以我可以理解发送新重新发送的行为,但已经有重新发送正在进行中..)

接受者实际上应该进行并发和重叠重发吗?


编辑/添加问题,因为评论太长了。

我们的 qfn 配置了默认的 SendRedundantResendRequests (false),并且它对很多“不发送另一个”也有效。

参见例如日志:

20:53:35.087 : Received logon
20:53:35.087 : MsgSeqNum too high, expecting 2999869 but received 3002522
20:53:35.103 : Sent ResendRequest FROM: 2999869 TO: 0
20:53:35.103 : MsgSeqNum too high, expecting 2999869 but received 3002523
20:53:35.103 : Already sent ResendRequest FROM: 2999869 TO: 0.  Not sending another.
 [ very many 'already sent resendrequest' cut away ]
20:53:37.134 : Already sent ResendRequest FROM: 2999869 TO: 0.  Not sending another.
20:53:37.134 : MsgSeqNum too high, expecting 2999869 but received 3004823
20:53:37.134 : Already sent ResendRequest FROM: 2999869 TO: 0.  Not sending another.
20:53:37.134 : MsgSeqNum too high, expecting 2999869 but received 3004824
20:53:37.134 : Already sent ResendRequest FROM: 2999869 TO: 0.  Not sending another.
20:53:37.134 : ResendRequest for messages FROM: 2999869 TO: 0 has been satisfied.
20:53:37.197 : MsgSeqNum too high, expecting 2999877 but received 3004825
20:53:37.197 : Sent ResendRequest FROM: 2999877 TO: 0
20:53:37.197 : ResendRequest for messages FROM: 2999877 TO: 0 has been satisfied.
20:53:37.197 : MsgSeqNum too high, expecting 2999893 but received 3004826
20:53:37.197 : Sent ResendRequest FROM: 2999893 TO: 0
20:53:37.212 : ResendRequest for messages FROM: 2999893 TO: 0 has been satisfied.
20:53:37.244 : Received SequenceReset FROM: 2999893 TO: 2999894
20:53:37.259 : MsgSeqNum too high, expecting 2999905 but received 3004827
20:53:37.259 : Sent ResendRequest FROM: 2999905 TO: 0
20:53:37.259 : ResendRequest for messages FROM: 2999905 TO: 0 has been satisfied.
20:53:37.275 : MsgSeqNum too high, expecting 2999919 but received 3004828
20:53:37.275 : Sent ResendRequest FROM: 2999919 TO: 0
20:53:37.275 : ResendRequest for messages FROM: 2999919 TO: 0 has been satisfied.
20:53:37.275 : MsgSeqNum too high, expecting 2999933 but received 3004829
20:53:37.275 : Sent ResendRequest FROM: 2999933 TO: 0

事件“从:2999869 到:0 已满足”使 qfn 认为正在进行的重新发送已完成,并且在下一个“MsgSeqNum 太高,预期为 2999877 但收到 3004825”时发出另一个重新发送,尽管已经有重新发送正在进行。

这继续下去,上面的例子给出了多个并发重新发送。

客户端是否应该在 3002521 之前发送另一个重发请求?

这里发生的情况是我们收到重新发送的消息 2999869 - 2999876 但随后我们收到 3004825(不正确?)触发新的重新发送。

标签: quickfixjquickfixn

解决方案


推荐阅读