在处理 FIX 传入消息时处理 QuickFix/J 中的错误的选项
Options for dealing with errors in QuickFix/J while processing FIX incoming messages
我正在使用 QuickFIX/J 实现一个非常简单的应用程序来跟踪 TradeCaptureReport
消息。基本上,该应用程序仅将通过 public void fromApp(Message message, SessionID session)
收到的所有消息存储到数据库中。
假设由于某种原因数据库暂时关闭。解决这种情况的最佳方法是什么?
只需从public void fromApp(Message message, SessionID session)
中抛出一个RuntimeException
。这将防止消息从队列中删除,并且 fromApp
将使用此消息一次又一次地被调用,直到数据库再次启动。到达我的 FIX 引擎的其他消息将堆积在我们这边。
一旦我们检测到数据库连接问题,我们就会注销并从 fromApp
中抛出 RuntimeException。这确保最后一条消息不会从队列中删除,并且任何进一步的消息都将堆积在 FIX 会话的另一端(在交易对手处)。我们继续轮询数据库,直到它再次出现。再次启动,我们登录并从我们离开的地方继续。
还有其他选择吗?
您的第二个选项还可以:当您检测到 database/OMS 出现故障时注销。但是,您可能只有在收到 TradeCaptureReport
.
时才会注意到这一点
选项:
回复 BusinessMessageReject
,拒绝原因 BusinessRejectReason.APPLICATION_NOT_AVAILABLE
。将 RefSeqNum
设置为您收到的消息的 MsgSeqNum
,可选择在 Text (58)
中设置原因。请注意,这是否会被正确处理,甚至是否得到支持,取决于交易对手的实施。
提供一个永远不会 down 的替代消息存储。例如,您自己维护的磁盘存储,并且您知道它永远不会崩溃。一旦 database/OMS 再次启动,将商店转发给您的 database/OMS。 AFAICT 这是处理此问题的最可靠方法。
我正在使用 QuickFIX/J 实现一个非常简单的应用程序来跟踪 TradeCaptureReport
消息。基本上,该应用程序仅将通过 public void fromApp(Message message, SessionID session)
收到的所有消息存储到数据库中。
假设由于某种原因数据库暂时关闭。解决这种情况的最佳方法是什么?
只需从
public void fromApp(Message message, SessionID session)
中抛出一个RuntimeException
。这将防止消息从队列中删除,并且fromApp
将使用此消息一次又一次地被调用,直到数据库再次启动。到达我的 FIX 引擎的其他消息将堆积在我们这边。一旦我们检测到数据库连接问题,我们就会注销并从
fromApp
中抛出 RuntimeException。这确保最后一条消息不会从队列中删除,并且任何进一步的消息都将堆积在 FIX 会话的另一端(在交易对手处)。我们继续轮询数据库,直到它再次出现。再次启动,我们登录并从我们离开的地方继续。
还有其他选择吗?
您的第二个选项还可以:当您检测到 database/OMS 出现故障时注销。但是,您可能只有在收到 TradeCaptureReport
.
选项:
回复
BusinessMessageReject
,拒绝原因BusinessRejectReason.APPLICATION_NOT_AVAILABLE
。将RefSeqNum
设置为您收到的消息的MsgSeqNum
,可选择在Text (58)
中设置原因。请注意,这是否会被正确处理,甚至是否得到支持,取决于交易对手的实施。提供一个永远不会 down 的替代消息存储。例如,您自己维护的磁盘存储,并且您知道它永远不会崩溃。一旦 database/OMS 再次启动,将商店转发给您的 database/OMS。 AFAICT 这是处理此问题的最可靠方法。