quickfixj 启动器在登录时手动重新发送重置到 seqnum

quickfixj initiator manually resend reset to a seqnum at logon

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

我猜你已经按照上一个线程同步了

QuickFixJ 管理 2 个序列号:

  1. SenderSequenceNum:发送消息时使用的序列号。
  2. TargetSequenceNum:预期接收的序列号。

所以你有两个选择:

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

选项 2:保留您已成功处理的序列号。在崩溃的情况下,在重新启动时,您可以使用以下设置预期的接收序列号:

Session.lookupSession(session_).setNextTargetMsgSeqNum();

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

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