1

メッセージを追跡する非常に単純なアプリケーションを実装するために QuickFIX/J を使用していTradeCaptureReportます。基本的に、アプリケーションは受信しpublic void fromApp(Message message, SessionID session)たすべてのメッセージのみをデータベースに保存します。

何らかの理由でデータベースが一時的にダウンしているとします。このような状況に対処する最善の方法は何でしょうか?

  1. RuntimeExceptionfrom を投げるだけpublic void fromApp(Message message, SessionID session)です。これにより、メッセージがキューから削除されなくfromAppなり、データベースが再び起動するまで、このメッセージで何度も呼び出されます。私のFIXエンジンに到着する他のメッセージは、私たちの側に積み上げられます.

  2. データベース接続の問題を検出するとすぐに、ログアウトして から RuntimeException をスローしfromAppます。これにより、最後のメッセージがキューから削除されず、それ以降のメッセージが FIX セッションの反対側 (カウンターパーティー) に積み上げられます。データベースが再び起動するまで、データベースのポーリングを続けます。もう一度、ログオンして、前の場所から続行します。

他のオプションはありますか?

4

1 に答える 1

1

2 番目のオプションはある程度問題ありません。データベース/OMS がダウンしたことを検出したら、ログアウトします。ただし、これに気付くのは、TradeCaptureReport.

オプション:

  1. BusinessMessageReject拒否理由を添えて返信しBusinessRejectReason.APPLICATION_NOT_AVAILABLEます。を受信したメッセージの に設定RefSeqNumMsgSeqNum、必要に応じて に理由を設定しText (58)ます。これが正しく処理されるか、サポートされるかは、取引相手の実装に依存することに注意してください。

  2. ダウンしない代替メッセージ ストアを提供します。たとえば、自分で維持し、決してダウンしないことがわかっているディスク上のストア。データベース/OMS が再び起動したら、ストアをデータベース/OMS に転送します。AFAICTこれは、これを処理する最も堅牢な方法です。

于 2016-02-13T09:25:12.697 に答える