用Quickfix详解Fix(八)-消息处理(消息恢复)

本文详细阐述了Fix消息恢复的两种情况:一是收到的消息序列号大于期望值,此时需发送重传请求,按顺序处理消息;二是收到的序列号小于期望值,会导致Logout并断开连接,通常通过自动增长序列号实现重新连接。介绍了Quickfix在处理这些情况时的具体策略,包括重发消息的标识、忽略特定类型的消息以及用户接口的调用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息恢复

所谓消息的恢复,有2种情况

收到的消息序列号大于所期望的序列号

这个表明丢失了一些消息 。则立刻应该发送一个重传消息,并告诉对方应该重新传送消息的开始序列号和结束序列号。并把当前接收到的消息压入待处理消息队列因为Fix 消息必须要求按顺序处理,等所有重传消息重新传过来,并处理后,再处理队列消息。对方收到重传消息后,则应该根据重传开始和结束序列号重新传送,在重新传送所有消息时候,当遇到消息是Admin类型时候(即:logon,HEARTBEAT,TEST_REQUEST,SEQUENCE_RESET,LOGOUT,RESEND_REQUEST,REJECT)则应该忽略,应该立刻发送一个直接重置的消息告诉对方这些消息不需要重发当遇到消息是业务消息时候,则从消息持久库中调出重新发送,并且要在消息中置一个标示,标示这个消息是重发消息。(在发送之前如果用户指定不需要发送,则可以像admin类型一样发送要求对方直接重置,这个Fix 没有明确规定,目前quicfxi具有这个功能)。举个例子说明:

比如 A 收到 B 发送过来的一个消息其序列号为 10 , 但A期望的是3 ,那么1)A会把消息10压入待处理队列,并且A立刻会发送一个要求重新发送消息给B ,并且指定要重发3-92)B收到后重新发送请求后,从消息持久库中找出3-9消息。假如各消息类型如下:3 : 业务消息4-6 :为admin消息7 :业务消息8 :admin消息9 :业务消息则B在重发的时候。对于3,则直接发送。并且要在消息中置一个标示,标示这个消息是重发消息(对于quickfix在发送之前,会调用用户接口,如果用户拒绝重发,则不发,按admin类型处理)对于4-6,不重新发送,但会发送一个要求A直接把期望的消息序列号增加到6对于7,则直接发送。并且要在消息中置一个标示,标示这个消息是重发消息(对于quickfix在发送之前,会调用用户接口,如果用户拒绝重发,则不发,按admin类型处理)对于8。,不重新发送,但会发送一个要求A直接把期望的消息序列号增加到8对于9,则直接发送。并且要在消息中置一个标示,标示这个消息是重发消息(对于qui

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值