我有一个quickfixj发起程序连接到供应商的接受者和接收消息。我将修复消息保存在由线程处理的缓冲区中。为了避免在缓冲区中的消息崩溃的情况下丢失消息,我处理了最后一个seqnum,并计划在我重新连接时为我旁边的seqnum发送重新发送消息。 我知道更好的解决方案是在收到消息之前保存消息,但设计是避免在onMessage调用中进行任何数据库访问。 我没有找到如何做到这一点的任何示例,重新发送特定seqnum的请求。我应该简单地重载登录消息并发送seqnum吗? 有人有例子吗?
答案 0 :(得分:0)
我猜你已经按照最后一个帖子if quickfixj crash in onmessage, will I lose my current message?进行了同步。
QuickFixJ管理2个序列号:
所以你有两个选择:
选项1:在QuickfixJ onMessage()回调线程上处理接收消息。因此,在异常情况下,序列号不会增加。并且QuickFixJ会在接收下一个修复消息时自动发送重发请求,因为它将检测序列间隙。
选项2:保留已成功处理的序列号。如果发生崩溃,重启后您可以使用以下方式设置预期的接收序列号:
Session.lookupSession(session_).setNextTargetMsgSeqNum();
因此,如果您收到的序列号高于此值,QuickfixJ会自动发送重新发送请求。
注意:请勿更改发件人序列号,否则另一方将收到低于预期的序列号,并可能导致断开连接。