我正在开发一种解决方案,以使用带有quickfixj框架的FIX协议连接到金融市场。具体来说,我正在实现启动器,并且需要连接到接受器并指定用户名和密码。关于如何将“登录”消息中的这些字段传递给服务器的信息,quickfixj文档不是很清楚。
通过检查,我发现它已放入toAdmin函数中,我在此函数中放入了以下代码:
@Override
public void toAdmin(Message message, SessionID sessionId) {
Session.lookupSession(sessionId).setTargetDefaultApplicationVersionID(new ApplVerID("9"));
final Message.Header header = message.getHeader();
try {
if ( header.getField(new BooleanField(MsgType.FIELD)).equals(MsgType.LOGON) ) {
message.setField(new StringField(Username.FIELD, "user"));
message.setField( new StringField(Password.FIELD, "pass"));
System.out.println(">>> " + message.toRawString());
}
} catch (FieldNotFound e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是我仍然无法执行登录过程,它在尝试登录时会显示下一条日志。
<20190313-14:44:33, FIXT.1.1:aaa->bbb, outgoing> (8=FIXT.1.1 9=74 35=A 34=1 49=aaa 52=20190313-14:44:33.431 56=bbb 98=0 108=30 1137=9 10=131 )
<20190313-14:44:33, FIXT.1.1:aaa->bbb, event> (Initiated logon request)
<20190313-14:44:33, FIXT.1.1:aaa->bbb, event> (Disconnecting: Encountered END_OF_STREAM)
<20190313-14:44:37, FIXT.1.1:aaa->bbb, event> (MINA session created: local=/192.168.1.80:51372, class org.apache.mina.transport.socket.nio.NioSocketSession, remote=/3.3.3.3:443)
<20190313-14:44:38, FIXT.1.1:aaa->bbb, outgoing> (8=FIXT.1.1 9=74 35=A 34=2 49=aaa 52=20190313-14:44:38.420 56=bbb 98=0 108=30 1137=9 10=135 )
<20190313-14:44:38, FIXT.1.1:aaa->bbb, event> (Initiated logon request)
<20190313-14:44:38, FIXT.1.1:aaa->bbb, event> (Disconnecting: Encountered END_OF_STREAM)
在某些论坛中,他们提到,如果用户名和密码未正确传递,则可能会发生这种情况
问题:
答案 0 :(得分:2)
这是您在toAdmin()
中需要的:
final String msgType = msg.getHeader().getString(MsgType.FIELD);
if(MsgType.LOGON.compareTo(msgType) == 0)
{
msg.setString(quickfix.fields.Username.FIELD, _username);
msg.setString(quickfix.fields.Password.FIELD, _password);
}
它在User FAQ中。
答案 1 :(得分:2)
从QuickFIX / J 2.2.0开始,您可以传递LogonTag
会话设置,以在发出的登录消息中设置这些标签。
示例:
LogonTag=553=user
LogonTag1=554=password