2016-01-31 7 views
1

Я использую QuickFIX/J для реализации очень простого приложения, которое отслеживает сообщения TradeCaptureReport. В основном приложение сохраняет только все сообщения, полученные через public void fromApp(Message message, SessionID session), в базу данных.Опции для обработки ошибок в QuickFix/J при обработке входящих сообщений FIX

Предположим, что по какой-то причине база данных временно отключена. Какой был бы лучший способ решить такую ​​ситуацию?

  1. Просто бросить RuntimeException из public void fromApp(Message message, SessionID session). Это предотвратит удаление сообщения из очереди, и fromApp будет вызываться снова и снова с этим сообщением до тех пор, пока база данных не будет снова вставлена. Другие сообщения, поступающие на мой движок FIX, будут складываться с нашей стороны.

  2. Как только мы обнаруживаем проблему с подключением к базе данных, мы выходим из системы и высылаем исключение RuntimeException из fromApp. Это гарантирует, что последнее сообщение не будет удалено из очереди, и любые другие сообщения будут складываться с другой стороны сеанса FIX (у контрагента). Мы продолжаем опрос базы данных, пока она не появится снова. Вернемся снова, мы заходим и продолжаем с того места, где мы ушли.

Есть ли другие варианты?

ответ

1

Ваш второй вариант несколько в порядке: выйдите из системы, когда вы обнаружите, что ваша база данных/OMS не работает. Однако вы можете заметить это только когда вы только что получили TradeCaptureReport.

Варианты:

  1. Ответить с BusinessMessageReject с отклонять причину BusinessRejectReason.APPLICATION_NOT_AVAILABLE. Установите RefSeqNum на номер MsgSeqNum сообщения, которое вы получили, необязательно установили причину в Text (58). Обратите внимание, что это зависит от реализации контрагента, будет ли это обрабатываться правильно или даже поддерживается.

  2. Предоставьте альтернативное хранилище сообщений, в котором никогда не будет down. Например, магазин на диске, который вы поддерживаете, и из которого вы знаете, что он никогда не опустится. Как только база данных/OMS снова встанет, переместите хранилище в свою базу данных/OMS. AFAICT - это самый надежный способ справиться с этим.

 Смежные вопросы

  • Нет связанных вопросов^_^