メッセージを受信するために Quickfix/J を使用していますが、「Sent test request TEST」が発生します。ログ ファイル (FIX.4.2-AB.event.log) は、次のことを示しています。
23:19:05: Sent test request TEST
23:19:32: Disconnecting: Timed out waiting for heartbeat
23:19:33: Initiated logon request
23:19:44: Disconnecting: Timed out waiting for logon response
23:19:45: Initiated logon request
23:19:56: Disconnecting: Timed out waiting for logon response ...
しかし、別のログ ファイル (FIX.4.2-AB.message.log) で何かを見つけました。
8=FIX.4.2|9=68|35=1|34=250|49=A|52=20140224-23:19:05.909|56=B|112=TEST|10=106
8=FIX.4.2|9=74|35=0|49=B|56=A|43=N|34=1320|52=20140224-23:19:23.381|112=TEST|10=130
これは明らかに、相手方 B がすでにハートビートを私たちに送り返してきたことを示しています。
FIX.4.2-AB.messages.log ファイルはまだ大きくなっています!!!!!!!!!!!! ファイルはメッセージを受信し続けますが、Quickfix/J プロセスはありません (onMessage() メソッド内では何も起こりません)!!!!
なぜこれが起こっているのか教えてください。ハートビートを受信した後も接続が失われ、ログが切断されるのはなぜですか?
この問題はまだ解決されていないためです。更新は次のとおりです。
私の設定:
[default]
FileStorePath=/target/data/fixapplication
ConnectionType=initiator
SenderCompID=A
TargetCompID=B
SocketConnectHost=xxx.xxx.xxx.xx
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
ReconnectInterval=5
FileLogPath=logs/fix/
[session]
BeginString=FIX.4.2
SocketConnectPort=xxx
ValidateFieldsOutOfOrder=N
ResetOnLogon=Y
コードは次のとおりです。
@Override
public void fromAdmin(Message message, SessionID sessionID) throws FieldNotFound,
IncorrectDataFormat, IncorrectTagValue, RejectLogon {
if (adminLog.isInfoEnabled())
adminLog.info("Inside fromAdmin(): " + message.getHeader().getString(MsgType.FIELD)
+ " ; " + message);
}
@Override
public void fromApp(Message message, SessionID sessionID) throws FieldNotFound,
IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {
crack(message, sessionID);
}
@Override
public void onCreate(SessionID arg0) {
}
@Override
public void onLogon(SessionID session) {
if (adminLog.isInfoEnabled()) {
adminLog.info("Inside onLogon: Logon completed " + session.toString());
}
}
@Override
public void onLogout(SessionID sessionId) {
if (adminLog.isInfoEnabled()) {
adminLog.info("Inside onLogout: Logout completed " + sessionId.toString());
}
}
基本的にはQuickfix/J
、接続自体を処理させます。
問題は、アプリがまだメッセージを受信し続けているが処理していないことであり、ログ ファイルには接続していないことが示されています。すべてのメッセージは FIX.4.2-AB.message.log にあります。そのため、メッセージは増え続けています。
私はいくつかの同様のケースを見つけました:
http://www.quickfixj.org/jira/browse/QFJ-668
http://www.quickfixj.org/jira/browse/QFJ-624
http://quickfix-j.364392.n2.nabble.com/Timed-out-waiting-for-heartbeat-td365186.html
http://www.quickfixj.org/jira/browse/QFJ-759
残念ながら、それらのどれも解決策を提供しません。だから私を助けてください。
2 回目の更新は次のとおりです。
ログ ファイルを抽出します (私は A であり、相手方は B です)。
8=FIX.4.2|9=58|35=0|34=49|49=A|52=23:23:50.075|56=B|10=030|
8=FIX.4.2|9=58|35=0|34=50|49=A|52=23:24:20.074|56=B|10=019|
**8=FIX.4.2|9=67|35=1|34=51|49=A|52=23:24:46.074|56=B|112=TEST|10=047|**
**8=FIX.4.2|9=74|35=0|49=B|56=A|43=N|34=1103|52=23:24:59.060|112=TEST|10=125|**
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:25:14.076|56=B|98=0|108=30|141=Y|10=059|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:25:27.076|98=0|108=30|10=004|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:25:27.077|112=03/03/2014-07:25:27|10=117|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:25:26.076|56=B|98=0|108=30|141=Y|10=062|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:25:39.064|98=0|108=30|10=004|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:25:39.065|112=03/03/2014-07:25:39|10=120|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:25:38.076|56=B|98=0|108=30|141=Y|10=065|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:25:51.064|98=0|108=30|10=254|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:25:51.065|112=03/03/2014-07:25:51|10=108|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:25:50.076|56=B|98=0|108=30|141=Y|10=059|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:26:03.064|98=0|108=30|10=252|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:26:03.065|112=03/03/2014-07:26:03|10=104|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:26:02.076|56=B|98=0|108=30|141=Y|10=057|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:26:15.064|98=0|108=30|10=255|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:26:15.065|112=03/03/2014-07:26:15|10=110|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:26:14.076|56=B|98=0|108=30|141=Y|10=060|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:26:27.064|98=0|108=30|10=002|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:26:27.065|112=03/03/2014-07:26:27|10=116|
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:26:26.076|56=B|98=0|108=30|141=Y|10=063|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:26:39.065|98=0|108=30|10=006|
セッションへのログオンを再試行し続けますが、失敗することに注意してください。
その間、アプリは相手からメッセージを受信し続けていると確信しています。その証拠は、FIX.4.2-AB.message.log ファイルが有効なメッセージ (ハートビートだけでなく、他の有効なメッセージ) で成長し続けることです。つまり、接続は失われていません。
セッションにログオンできないのはなぜですか?
助けてください
3 番目の更新:
ログオンの開始成功ログは次のとおりです。
8=FIX.4.2|9=75|35=A|34=1|49=A|52=23:00:07.095|56=B|98=0|108=30|141=Y|10=055|
8=FIX.4.2|9=74|35=A|49=B|56=A|43=N|34=1|52=23:00:20.221|98=0|108=30|10=238|
8=FIX.4.2|9=86|35=1|49=B|56=A|43=N|34=2|52=23:00:20.222|112=07:00:20|10=081|
8=FIX.4.2|9=81|35=0|34=2|49=A|52=23:00:07.301|56=B|112=07:00:20|10=091|
8=FIX.4.2|9=57|35=0|34=3|49=A|52=23:00:38.075|56=B|10=228|
8=FIX.4.2|9=63|35=0|49=B|56=A|43=N|34=26|52=23:00:51.260|10=00
3 行目は、相手方が私に TEST リクエストを送信し、私は応答しなかったことを示しています。これは問題ないようで、接続が確立されています。
TEST リクエストの応答を明示的に処理する必要がありますか? quickfix/j で処理できるようです。