1

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

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

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

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

还有其他选择吗?

4

1 回答 1

1

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

选项:

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

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

于 2016-02-13T09:25:12.697 回答