QuickFix поддерживает порядковый номер между несколькими акцепторами

Я использую библиотеку Quickfix/n. У меня есть акцептор, работающий на 2 машинах и один инициатор. В настоящее время у меня возникают проблемы с сохранением порядкового номера между инициатором и акцептором, когда один из акцепторов выходит из строя. Для бывшего Инициатор отправляет и получает сообщения от акцептора, который находится на машине 1. Последний SeqNum, отправленный акцептором на машине 1, был 5, когда он вышел из строя. Теперь акцептор на машине 2 подключен, но инициатор отправляет сообщения о выходе из системы, в которых говорится, что MsgSeqNum слишком низкий, ожидая SeqNum 6, но получая 1. Итак, как я могу гарантировать, что акцептор на машине 2 начнет с SeqNum 6, а не 1?


person Rohan    schedule 26.06.2020    source источник


Ответы (1)


Я думаю, что это может сработать только в том случае, если оба акцептора используют один и тот же источник для своего хранилища сообщений.

Если вы используете FileStore, то этот файл должен находиться на общем диске, и оба акцептора должны указывать на него.

Обновленный ответ на основе комментария:

Я не знал, что ваши акцепторы работают одновременно. (Хотя я не знаю, как это будет работать. Как инициатор перенаправляется ко второму акцептору, когда первый умирает?)

Помимо вопроса в скобках, может работать собственное хранилище БД. Реализовать интерфейс IMessageStore & IMessageStoreFactory довольно просто. Оба акцептора могут указывать на одну и ту же БД; пока они не пишут в одну и ту же таблицу одновременно, все должно быть хорошо.

Не обязательно БД, конечно. Подойдет любое постоянное местоположение, допускающее два подключения. Просто реализуйте IMessageStore для работы с ним.

person Grant Birchmeier    schedule 27.06.2020
comment
Я пытался это сделать, но тогда оба акцептора работают одновременно, поэтому я получаю, что файл используется другой ошибкой ресурса. Я решил пока хранить порядковый номер в распределенном кеше. - person Rohan; 28.06.2020
comment
Грант, я добавил SocketConnectHost и SocketConnectHost1 в конфигурацию инициатора и запустил оба моих акцептора, чтобы инициатор автоматически переключался на акцептор 2. Это обрабатывается самим QuickFix/n. - person Rohan; 08.07.2020
comment
Грант, есть ли метод setNextSenderMsgSeqNum в библиотеке quickfix/n? - person Rohan; 08.07.2020