Spring boot 如何使用quickfixj spring引导启动器从服务器捕获执行报告?
同事们,我正在向服务器发送Spring boot 如何使用quickfixj spring引导启动器从服务器捕获执行报告?,spring-boot,fix-protocol,quickfixj,Spring Boot,Fix Protocol,Quickfixj,同事们,我正在向服务器发送NewOrderSingle消息,服务器接收消息并发送响应(执行报告(35=8)): 在单元测试中,这个方法的结果是true,但我在日志中没有看到服务器的响应(执行报告(35=8)) 我有ApplicationListener课程: @Slf4j @Component public class ApplicationListener { @EventListener public void handleCreate(Create create) {
NewOrderSingle
消息,服务器接收消息并发送响应(执行报告(35=8)):
在单元测试中,这个方法的结果是true
,但我在日志中没有看到服务器的响应(执行报告(35=8))
我有ApplicationListener
课程:
@Slf4j
@Component
public class ApplicationListener {
@EventListener
public void handleCreate(Create create) {
log.info("onCreate: SessionId={}", create.getSessionId());
}
@EventListener
public void handleLogon(Logon logon) {
log.info("onLogon: SessionId={}", logon.getSessionId());
}
@EventListener
public void handleLogout(Logout logout) {
log.info("onLogout: SessionId={}", logout.getSessionId());
}
@EventListener
public void handleToAdmin(ToAdmin toAdmin) {
try {
if (toAdmin.getMessage().getHeader().getString(35).equals("A")) {
toAdmin.getMessage().setString(554, "*******");
toAdmin.getMessage().setString(141, "Y");
}
} catch (Exception e) {
e.printStackTrace();
}
log.info("toAdmin: SessionId={}", toAdmin.getSessionId());
}
@EventListener
public void handleFromAdmin(FromAdmin fromAdmin) {
log.info("fromAdmin: Message={}, SessionId={}", fromAdmin.getMessage(), fromAdmin.getSessionId());
}
@EventListener
public void handleToApp(ToApp toApp) {
log.info("toApp: SessionId={}", toApp.getSessionId());
}
@EventListener
public void handleFromApp(FromApp fromApp) {
log.info("fromApp: Message={}, SessionId={}", fromApp.getMessage(), fromApp.getSessionId());
try {
if (fromApp.getMessage().getHeader().getString(35).equals("8")) {
log.info("It looks we handle ExecutionReport");
//programm doesn't come to this thread =(
} else {
log.info("It is not a ExecutionReport message");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
创建会话和登录时,它会向控制台ToAdmin
,FromAdmin
,toApp
,fromApp
消息写入消息,但它无法处理NewOrderSingle
消息的响应
你能帮我处理执行报告(35=8)吗?执行报告应该记录在
fromApp
中,不是吗?那么,你就不能检查一下app.getMessage().getHeader().getString(35.equals(“8”),然后继续往下看吗?@ChristophJohn,谢谢你的回复。我将if
添加到handleFromApp
方法中,但是程序没有进入true
线程。但是如果消息不是ExecutionReport
,它将出现在else
中。您可以从handleFromApp
方法添加一些日志输出吗?日志信息(“fromApp:Message=…”的输出是什么语句?是否确实收到了执行报告?可能是因为此消息未通过验证,因此未转发到fromApp。您是否可以检查所有日志文件是否存在错误?或者您的toAdmin是否包含拒绝?MsgType 35=3执行报告应记录在fromApp的中,不是吗?您也不能这样做吗你只需从app.getMessage().getHeader().getString(35.equals)(“8”)中进行检查
然后从那里继续?@ChristophJohn,谢谢你的回复。我将if
添加到handleFromApp
方法中,但是程序没有true
线程。但是如果消息不是ExecutionReport
,它将进入else
。你能从handleFromApp
方法添加一些日志输出吗?什么是log.info(“fromApp:Message=…”
语句的输出吗?是否确实收到了执行报告?可能是此消息未通过验证,因此未转发到fromApp。是否可以检查所有日志文件是否有错误?或者您的toAdmin是否包含拒绝?MsgType 35=3
@Slf4j
@Component
public class ApplicationListener {
@EventListener
public void handleCreate(Create create) {
log.info("onCreate: SessionId={}", create.getSessionId());
}
@EventListener
public void handleLogon(Logon logon) {
log.info("onLogon: SessionId={}", logon.getSessionId());
}
@EventListener
public void handleLogout(Logout logout) {
log.info("onLogout: SessionId={}", logout.getSessionId());
}
@EventListener
public void handleToAdmin(ToAdmin toAdmin) {
try {
if (toAdmin.getMessage().getHeader().getString(35).equals("A")) {
toAdmin.getMessage().setString(554, "*******");
toAdmin.getMessage().setString(141, "Y");
}
} catch (Exception e) {
e.printStackTrace();
}
log.info("toAdmin: SessionId={}", toAdmin.getSessionId());
}
@EventListener
public void handleFromAdmin(FromAdmin fromAdmin) {
log.info("fromAdmin: Message={}, SessionId={}", fromAdmin.getMessage(), fromAdmin.getSessionId());
}
@EventListener
public void handleToApp(ToApp toApp) {
log.info("toApp: SessionId={}", toApp.getSessionId());
}
@EventListener
public void handleFromApp(FromApp fromApp) {
log.info("fromApp: Message={}, SessionId={}", fromApp.getMessage(), fromApp.getSessionId());
try {
if (fromApp.getMessage().getHeader().getString(35).equals("8")) {
log.info("It looks we handle ExecutionReport");
//programm doesn't come to this thread =(
} else {
log.info("It is not a ExecutionReport message");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}