2014-01-23 11 views
3

Имея проблемы с QuickFixJ. Проблема в том, что я не могу правильно отправить сообщение для входа. Кроме того, у меня плохое понимание того, как настроить поток сообщений. Я не пытаюсь выполнять сделки, просто извлекаю рыночные данные.QuickFIXJ Logon Issue

Ошибка:

20140123-22:55:56: No responder, not sending message: 

Вот все мои детали:

Входящие: кошки входящей/*

8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231?220140123-22:55:56.470 

Исходящие:

20140123-22:55:50: Session FIXT.1.1:REDACTED-MD->NDXMD schedule is weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC 
20140123-22:55:50: Created session: FIXT.1.1:REDACTED-MD->NDXMD 
20140123-22:55:53: Initiated logon request 
20140123-22:55:56: No responder, not sending message: 8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231 
8=FIXT.1.19=8135=A34=149=REDACTED-MD52=20140123-22:55:52.64356=NDXMD98=0108=30141=Y1137=910=114 
8=FIXT.1.19=8335=549=NDXMD56=REDACTED-MD52=20140123-22:55:53.75134=158=Missing field. Type 55310=054 
8=FIXT.1.19=11035=A34=149=REDACTED-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=231 

И моя ул DOUT является: J

an 23, 2014 10:55:37 PM REDACTED.REDACTEDMain main 
INFO: REDACTED startup 
Jan 23, 2014 10:55:49 PM quickfix.SessionSchedule <init> 
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC 
Successfully called onCreate for sessionId : FIXT.1.1:REDACTEDB-MD->NDXMD 
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption 
INFO: Socket option: SocketTcpNoDelay=true 
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption 
INFO: Socket option: SocketSynchronousWrites=false 
Jan 23, 2014 10:55:50 PM quickfix.mina.NetworkingOptions logOption 
INFO: Socket option: SocketSynchronousWriteTimeout=30000 
Jan 23, 2014 10:55:51 PM quickfix.mina.initiator.IoSessionInitiator <init> 
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] [web-fix.REDACTED.com/194.107.REDACTED:7170] 
Jan 23, 2014 10:55:51 PM quickfix.mina.SessionConnector startSessionTimer 
INFO: SessionTimer started 
Sleeping for start() .... 
Jan 23, 2014 10:55:51 PM quickfix.mina.initiator.InitiatorIoHandler sessionCreated 
INFO: MINA session created for FIXT.1.1:REDACTEDB-MD->NDXMD: local=/10.215.87.15:34197, class org.apache.mina.transport.socket.nio.SocketSessionImpl, remote=web-fix.REDACTED.com/194.107.REDACTED:7170 
Inside toAdmin 
Message: 8=FIXT.1.19=8135=A34=149=REDACTEDB-MD52=20140123-22:55:52.64356=NDXMD98=0108=30141=Y1137=910=114 
XML: <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<message> 
<header> 
<field tag="8"><![CDATA[FIXT.1.1]]></field> 
<field tag="9"><![CDATA[81]]></field> 
<field tag="34"><![CDATA[1]]></field> 
<field tag="35"><![CDATA[A]]></field> 
<field tag="49"><![CDATA[REDACTEDB-MD]]></field> 
<field tag="52"><![CDATA[20140123-22:55:52.643]]></field> 
<field tag="56"><![CDATA[NDXMD]]></field> 
</header> 
<body> 
<field tag="98"><![CDATA[0]]></field> 
<field tag="108"><![CDATA[30]]></field> 
<field tag="141"><![CDATA[Y]]></field> 
<field tag="1137"><![CDATA[9]]></field> 
</body> 
<trailer> 
<field tag="10"><![CDATA[114]]></field> 
</trailer> 
</message> 

Header: [email protected] 
Trailer: [email protected] 
Jan 23, 2014 10:55:53 PM quickfix.mina.AbstractIoHandler messageReceived 
SEVERE: Invalid message: Can't determine ApplVerID for message 
Jan 23, 2014 10:55:53 PM quickfix.Session disconnect 
INFO: [FIXT.1.1:REDACTEDB-MD->NDXMD] Disconnecting: IO Session closed 
Successfully logged out for sessionId : FIXT.1.1:REDACTEDB-MD->NDXMD 
Inside toAdmin 
Message: 8=FIXT.1.19=11035=A34=249=REDACTEDB-MD52=20140123-22:55:56.37256=NDXMD98=0108=30141=Y553=REDACTED100554=REDACTED1137=910=232 
XML: <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<message> 
<header> 
<field tag="8"><![CDATA[FIXT.1.1]]></field> 
<field tag="9"><![CDATA[110]]></field> 
<field tag="34"><![CDATA[2]]></field> 
<field tag="35"><![CDATA[A]]></field> 
<field tag="49"><![CDATA[REDACTEDB-MD]]></field> 
<field tag="52"><![CDATA[20140123-22:55:56.372]]></field> 
<field tag="56"><![CDATA[NDXMD]]></field> 
</header> 
<body> 
<field tag="98"><![CDATA[0]]></field> 
<field tag="108"><![CDATA[30]]></field> 
<field tag="141"><![CDATA[Y]]></field> 
<field tag="553"><![CDATA[REDACTED100]]></field> 
<field tag="554"><![CDATA[REDACTED]]></field> 
<field tag="1137"><![CDATA[9]]></field> 
</body> 
<trailer> 
<field tag="10"><![CDATA[232]]></field> 
</trailer> 
</message> 

Header: [email protected] 
Trailer: [email protected] 
Logon Message Sent : false 

И мой источник в вопросе: MAIN:

try { 
     Application app = new AFIX(); 
     SessionSettings settings   = new SessionSettings("sessionSettings.txt"); 
     FileStoreFactory fileStoreFactory = new FileStoreFactory(settings); 
     FileLogFactory logFactory   = new FileLogFactory(settings); 
     MessageFactory messageFactory  = new DefaultMessageFactory(); 
     SocketInitiator socketInitiator = new SocketInitiator(app, 
       fileStoreFactory, settings, logFactory, messageFactory); 
     socketInitiator.start(); 
     try { 
      System.out.println("Sleeping for start() ...."); 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     SessionID sessionId = socketInitiator.getSessions().get(0); 
     AFIX.sendLogonRequest(sessionId); 

     int i = 0; 
     do { 
      try { 
       Thread.sleep(1000); 
       System.out.println(socketInitiator.isLoggedOn()); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      i++; 
     } while ((!socketInitiator.isLoggedOn()) && (i < 25)); 

    } catch (ConfigError e) { 

... ... ...

public static void sendLogonRequest(SessionID sessionId) 
     throws SessionNotFound { 

    quickfix.fixt11.Logon logon = new quickfix.fixt11.Logon(); 
    quickfix.Message.Header header = logon.getHeader(); 

    header.setField(new quickfix.field.BeginString("FIXT.1.1")); 
    header.setField(new quickfix.field.MsgType("A")); 

    Properties p = loadProperties(); 
    logon.set(new quickfix.field.Username(p.getProperty("username"))); 
    logon.set(new quickfix.field.Password(p.getProperty("password"))); 

    logon.set(new quickfix.field.HeartBtInt(30)); 
    logon.set(new quickfix.field.ResetSeqNumFlag(true)); 
    logon.set(new quickfix.field.DefaultApplVerID("9")); 
    logon.set(new quickfix.field.EncryptMethod(0)); 

    boolean sent = Session.sendToTarget(logon, sessionId); 
    System.out.println("Logon Message Sent : " + sent); 
} 

И, наконец, My настройки:

cat sessionSettings.t xt

[DEFAULT]# Settings which apply to all the Sessions. 
ConnectionType=initiator 
LogonTimeout=30 
ReconnectInterval=30 
UseDataDictionary=Y 
ResetOnLogon=Y 
FileStorePath=incoming 
FileLogPath=outgoing 

[SESSION]# Settings specifically for one session 
BeginString=FIXT.1.1 
DefaultApplVerID=9 
AppDataDictionary=FIX50.xml 
SenderCompID=REDACTED-MD 
TargetCompID=NDXMD 
StartDay=sunday 
EndDay=friday 
StartTime=00:00:00 
EndTime=00:00:00 
HeartBtInt=30 
CheckLatency=N 
MaxLatency=240 
SocketConnectPort=7170 
SocketConnectHost=web-fix.REDACTED.com 

UseDataDictionary=Y 
DataDictionary=lib/quickfixj-all-1.5.3.jar!/FIX50SP2.xml 

Любая помощь очень ценится!

ответ

4

Посмотрите на example OrderMatch app.

(Это акцептором, а не инициатор, но это на самом деле не имеет значения.)

Вы заметите, что это не вручную создать сообщение входа в систему и отправить его. Двигатель делает это автоматически после initiator.start (или acceptor.start). (См. В вашем журнале: «Нет ответчика, не отправляющего сообщение» - это ваша линия входа в систему, пытающаяся отправить, прежде чем двигатель выполнит свой правильный вход в систему).

В принципе, возьмите весь этот код между socketInitiator.start();, а конец блока и удалите из него. Просто поставьте какое-то действие сна (например, вход ожидания для консоли или что-то еще).

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

+0

Грант - спасибо, хорошо, что сейчас пытается. По-прежнему необходимо определить, как отправлять мои учетные данные в сообщение для входа в систему. –

+0

[См. Здесь] (http://www.quickfixj.org/confluence/display/qfj/User+FAQ) о том, как добавить имя пользователя/пароль для входа в систему. –

+0

Грант - попробовал, и до сих пор нет кубиков. Я все еще изучаю варианты и исходный код ... так что посмотрим. –

2

Чтобы отправить учетные данные, вы хотите переопределить метод toAdmin, который унаследован от приложения.
Сначала проверьте MsgType, который удерживается в заголовке, убедитесь, что его сообщение для входа в систему. Затем вы можете добавить соответствующие поля в сообщение в этот момент. Механизм quickfix затем отправит сообщение со всем, что вам нужно.

Если вы ожидаете сделать что-то раньше, после входа в систему, то реализуйте интерфейс MessageCracker.

Переопределите метод fromApp из приложения и вызовите трек на msg.Затем вы переопределите форму метода onLogon MessageCracker, и вы можете запустить остальную часть кода с этой точки, так как вы будете знать, что вы вошли в систему.

1

Применимо для FIXT.1.1

Чтобы решить: Невозможно определить ApplVerID для сообщения

В вашем toAdmin() метод добавить ниже линии, Session.lookupSession (SESSIONID) .setTargetDefaultApplicationVersionID (новый ApplVerID ("9"));

Это позволит решить проблему и сообщение выхода из системы будет передан fromAdmin() метод