Как установить порядковые номера вручную в 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();

person user52028778    schedule 17.04.2018    source источник


Ответы (2)


Прежде всего вам нужно изучить код quickfixJ, чтобы увидеть, как это делается.

Во-вторых, в чем причина использования такой старой версии quickfixJ? Почему бы не обновиться до последней версии.

В-третьих, вам следует быть очень осторожным при изменении порядковых номеров, если вы не понимаете должным образом, как они используются в сообщении. Если вы не понимаете, вы гарантированно попадете в темные проблемы.

Вы можете сделать что-то вроде

Session.lookupSession(sessionID).setNextSenderMsgSeqNum())

Но прежде чем вы это сделаете, очень важно понять, как используются порядковые номера.

person DumbCoder    schedule 17.04.2018

Вы можете установить поля FIX, переопределить обратный вызов toAdmin

@Override
public void toAdmin(Message message, SessionID sessionId) {
      message.setBoolean(ResetSeqNumFlag.FIELD, true);
}
person Hemant Singh    schedule 07.05.2018