Я использую библиотеку Quickfix/n. У меня есть акцептор, работающий на 2 машинах и один инициатор. В настоящее время у меня возникают проблемы с сохранением порядкового номера между инициатором и акцептором, когда один из акцепторов выходит из строя. Для бывшего Инициатор отправляет и получает сообщения от акцептора, который находится на машине 1. Последний SeqNum, отправленный акцептором на машине 1, был 5, когда он вышел из строя. Теперь акцептор на машине 2 подключен, но инициатор отправляет сообщения о выходе из системы, в которых говорится, что MsgSeqNum слишком низкий, ожидая SeqNum 6, но получая 1. Итак, как я могу гарантировать, что акцептор на машине 2 начнет с SeqNum 6, а не 1?
QuickFix поддерживает порядковый номер между несколькими акцепторами
Ответы (1)
Я думаю, что это может сработать только в том случае, если оба акцептора используют один и тот же источник для своего хранилища сообщений.
Если вы используете FileStore, то этот файл должен находиться на общем диске, и оба акцептора должны указывать на него.
Обновленный ответ на основе комментария:
Я не знал, что ваши акцепторы работают одновременно. (Хотя я не знаю, как это будет работать. Как инициатор перенаправляется ко второму акцептору, когда первый умирает?)
Помимо вопроса в скобках, может работать собственное хранилище БД. Реализовать интерфейс IMessageStore & IMessageStoreFactory довольно просто. Оба акцептора могут указывать на одну и ту же БД; пока они не пишут в одну и ту же таблицу одновременно, все должно быть хорошо.
Не обязательно БД, конечно. Подойдет любое постоянное местоположение, допускающее два подключения. Просто реализуйте IMessageStore для работы с ним.