quickfixj initiator手动将重置重置为登录时的seqnum

时间:2018-06-13 12:57:50

标签: quickfix quickfixj

我有一个quickfixj发起程序连接到供应商的接受者和接收消息。我将修复消息保存在由线程处理的缓冲区中。为了避免在缓冲区中的消息崩溃的情况下丢失消息,我处理了最后一个seqnum,并计划在我重新连接时为我旁边的seqnum发送重新发送消息。 我知道更好的解决方案是在收到消息之前保存消息,但设计是避免在onMessage调用中进行任何数据库访问。 我没有找到如何做到这一点的任何示例,重新发送特定seqnum的请求。我应该简单地重载登录消息并发送seqnum吗? 有人有例子吗?

1 个答案:

答案 0 :(得分:0)

我猜你已经按照最后一个帖子if quickfixj crash in onmessage, will I lose my current message?进行了同步。

QuickFixJ管理2个序列号:

  1. SenderSequenceNum:发送消息时使用的序列号。
  2. TargetSequenceNum:预期接收的序列号。
  3. 所以你有两个选择:

    选项1:在QuickfixJ onMessage()回调线程上处理接收消息。因此,在异常情况下,序列号不会增加。并且QuickFixJ会在接收下一个修复消息时自动发送重发请求,因为它将检测序列间隙。

    选项2:保留已成功处理的序列号。如果发生崩溃,重启后您可以使用以下方式设置预期的接收序列号:

    Session.lookupSession(session_).setNextTargetMsgSeqNum();
    

    因此,如果您收到的序列号高于此值,QuickfixJ会自动发送重新发送请求。

    注意:请勿更改发件人序列号,否则另一方将收到低于预期的序列号,并可能导致断开连接。