quickfix/j SessionSettings 仅加载文件配置中的最后一个会话
quickfix/j SessionSettings loads only the last session from file config
当我尝试使用配置文件的 URL 调用 SessionSettings 的构造函数时,它仅加载文件中存在的最后一个会话。
我已经尝试打印我的代码从配置文件中读取的内容,但我得到了这个:
[DEFAULT]
StartTime=00:00:00
EndTime=23:59:59
ReconnectInterval=5
TargetCompID=Server
SenderCompID=Client
DataDictionary=C:\config\FIX42.xml
HeartBtInt=30
FileStorePath=C:\logsBadisInitiatorStore
UseDataDictionary=Y
FileLogPath=C:\logsBadisInitiator
[SESSION]
StartTime=00:00:00
ConnectionType=acceptor
EndTime=23:59:59
BeginString=FIX.4.2
SocketAcceptPort=9878
TargetCompID=server1
SessionName=badisAcc289
SenderCompID=client1
SocketAcceptAddress=localhost
UseDataDictionary=N
但我的配置文件包含的内容不止于此:
[default]
FileStorePath=data
SenderCompID=Client
TargetCompID=Server
FileLogPath=C:\logsBadisInitiator
StartTime=00:00:00
EndTime=23:59:59
HeartBtInt=30
ReconnectInterval=5
UseDataDictionary=Y
DataDictionary=C:\config\FIX42.xml
FileStorePath=C:\logsBadisInitiatorStore
[session]
SessionName=badisAcc2
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=test211
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=initiator
SocketConnectPort=9878
SocketConnectHost=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc3
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc4
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc289
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
这是我为加载会话设置而编写的代码:
String URLConfigFile="c:/config/initiatorSettings.txt";
sessionSettings = new SessionSettings(URLConfigFile);
System.out.println("sessionSettings tostring "+sessionSettings.toString());
我该如何解决这个问题?
根本原因
一个会话的配置正在破坏另一个会话,因为两个会话具有相同的 SessionID。
您的两个会话具有相同的 SessionID,它由 BeginString/SenderCompID/TargetCompID(有时还有其他字段)构成。
SessionSetting 实际上是每个会话的单个字典的散列,由 SessionID 键控。由于您的会话具有相同的 SessionID,因此它们会互相破坏。
你的配置也有逻辑问题
如果你想让这两个会话相互对话,那么 Sender/Target 值应该相反,例如
[session]
SessionName=badisAcc2
BeginString=FIX.4.2
SenderCompID=server1
TargetCompID=client1
ConnectionType=acceptor
...
[session]
SessionName=test211
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=initiator
...
当我尝试使用配置文件的 URL 调用 SessionSettings 的构造函数时,它仅加载文件中存在的最后一个会话。
我已经尝试打印我的代码从配置文件中读取的内容,但我得到了这个:
[DEFAULT]
StartTime=00:00:00
EndTime=23:59:59
ReconnectInterval=5
TargetCompID=Server
SenderCompID=Client
DataDictionary=C:\config\FIX42.xml
HeartBtInt=30
FileStorePath=C:\logsBadisInitiatorStore
UseDataDictionary=Y
FileLogPath=C:\logsBadisInitiator
[SESSION]
StartTime=00:00:00
ConnectionType=acceptor
EndTime=23:59:59
BeginString=FIX.4.2
SocketAcceptPort=9878
TargetCompID=server1
SessionName=badisAcc289
SenderCompID=client1
SocketAcceptAddress=localhost
UseDataDictionary=N
但我的配置文件包含的内容不止于此:
[default]
FileStorePath=data
SenderCompID=Client
TargetCompID=Server
FileLogPath=C:\logsBadisInitiator
StartTime=00:00:00
EndTime=23:59:59
HeartBtInt=30
ReconnectInterval=5
UseDataDictionary=Y
DataDictionary=C:\config\FIX42.xml
FileStorePath=C:\logsBadisInitiatorStore
[session]
SessionName=badisAcc2
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=test211
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=initiator
SocketConnectPort=9878
SocketConnectHost=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc3
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc4
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
[session]
SessionName=badisAcc289
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=acceptor
SocketAcceptPort=9878
SocketAcceptAddress=localhost
StartTime=00:00:00
EndTime=23:59:59
UseDataDictionary=N
这是我为加载会话设置而编写的代码:
String URLConfigFile="c:/config/initiatorSettings.txt";
sessionSettings = new SessionSettings(URLConfigFile);
System.out.println("sessionSettings tostring "+sessionSettings.toString());
我该如何解决这个问题?
根本原因 一个会话的配置正在破坏另一个会话,因为两个会话具有相同的 SessionID。
您的两个会话具有相同的 SessionID,它由 BeginString/SenderCompID/TargetCompID(有时还有其他字段)构成。
SessionSetting 实际上是每个会话的单个字典的散列,由 SessionID 键控。由于您的会话具有相同的 SessionID,因此它们会互相破坏。
你的配置也有逻辑问题
如果你想让这两个会话相互对话,那么 Sender/Target 值应该相反,例如
[session]
SessionName=badisAcc2
BeginString=FIX.4.2
SenderCompID=server1
TargetCompID=client1
ConnectionType=acceptor
...
[session]
SessionName=test211
BeginString=FIX.4.2
SenderCompID=client1
TargetCompID=server1
ConnectionType=initiator
...