Как вручную установить порядковые номера в QuickFixJ?
Я действую как акцептор. Есть ли способ установить порядковые номера вручную?
Первая идея, которая у меня была, заключалась в том, чтобы изменить файлы.seqnums, но это не работает.
Google упоминает о существовании методов setNextSenderMsgSeqNum и setNextTargetMsgSeqNum, однако я не могу сказать, по какому объекту я должен их вызывать (используя quickfixj 1.4).
Я знаю, что установка порядковых номеров вручную не рекомендуется, и есть несколько флагов, таких как ResetOnLogon и ResetOnDisconnect, но я не имею никакого контроля над инициатором, и есть куча других акцепторов (тестовых инструментов), которые используют тот же сеанс.
Application myApp = new FIXSender();
settings = new SessionSettings(sessionConfig);
MessageFactory messageFactory = new MessageFactory();
MessageStoreFactory storeFactory = new FileStoreFactory(settings);
LogFactory logFactory = new FileLogFactory(settings);
Acceptor acceptor = new SocketAcceptor(myApp, storeFactory, settings, logFactory, messageFactory);
acceptor.start();
2 ответа
Прежде всего вам нужно изучить код quickfixJ, чтобы увидеть, как это делается.
Во-вторых, что является причиной использования такой старой версии quickfixJ? Почему бы не обновить до последней версии.
В-третьих, вы должны быть очень осторожны с изменением порядковых номеров, если вы не понимаете должным образом, как они используются в общении. Если вы не понимаете, вы гарантированно попадете в мутные проблемы.
Вы можете сделать что-то вроде
Session.lookupSession(SESSIONID).setNextSenderMsgSeqNum())
Но прежде чем сделать это, очень важно понять, как используются порядковые номера
Вы можете установить поля FIX, переопределить обратный вызов toAdmin
@Override
public void toAdmin(Message message, SessionID sessionId) {
message.setBoolean(ResetSeqNumFlag.FIELD, true);
}