在处理FIX传入消息时处理QuickFix / J中的错误的选项

时间:2016-01-31 23:38:56

标签: fix-protocol quickfixj

我正在使用QuickFIX / J来实现一个跟踪TradeCaptureReport消息的非常简单的应用程序。基本上,应用程序仅将通过public void fromApp(Message message, SessionID session)收到的所有消息存储到数据库中。

假设由于某种原因数据库暂时关闭。解决这种情况的最佳方法是什么?

  1. 只需从RuntimeException投出public void fromApp(Message message, SessionID session)即可。这将阻止消息从队列中删除,并且将使用此消息一次又一次地调用fromApp,直到数据库再次启动。到达我的FIX引擎的其他消息将在我们的末尾堆积。

  2. 一旦我们检测到数据库连接问题,我们就会从fromApp注销并抛出RuntimeException。这样可以确保不会从队列中删除最后一条消息,并且会在FIX会话的另一侧(对方)堆积任何其他消息。我们继续轮询数据库,直到它再次出现。再一次,我们登录并继续我们离开的地方。

  3. 还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您的第二个选项有点可以:当您检测到数据库/ OMS出现故障时注销。但是,当您刚收到TradeCaptureReport时,您可能只会注意到这一点。

选项:

  1. 使用拒绝原因BusinessMessageReject回复BusinessRejectReason.APPLICATION_NOT_AVAILABLE。将RefSeqNum设置为您收到的邮件的MsgSeqNum,可以选择在Text (58)中设置原因。请注意,这取决于交易对手的实施,是否可以正确处理,甚至支持。

  2. 提供永远不会 down 的备用邮件存储。例如,您自己维护的磁盘上的存储,您知道它永远不会停止。数据库/ OMS再次启动后,将存储转发到您的数据库/ OMS。 AFAICT这是处理此问题的最有力方法。