2016-01-31 37 views
1

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

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

  1. 简单地从public void fromApp(Message message, SessionID session)RuntimeException。这将防止消息从队列中移除,并且将使用此消息一次又一次地调用fromApp,直到数据库再次启动。其他消息到达我的FIX引擎将堆积在我们的最后。

  2. 只要我们检测到数据库连接问题,就注销并从fromApp中抛出一个RuntimeException。这可以确保最后一条消息不会从队列中移除,并且任何进一步的消息都将堆放在FIX会话的另一侧(在对方处)。我们继续轮询数据库,直到它再次出现。再次登录后,我们登录并继续离开我们的位置。

还有其他的选择吗?

回答

1

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

选项:

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

  2. 提供一个永远不会去下降的替代消息存储。例如,您维护自己的磁盘上的商店,并且您知道它永远不会停止。一旦数据库/ OMS再次启动,将存储转发到您的数据库/ OMS。 AFAICT这是处理这个问题的最可靠的方法。