Quickfix/j 不尝试连接到指定的套接字

Posted

技术标签:

【中文标题】Quickfix/j 不尝试连接到指定的套接字【英文标题】:Quickfix/j doesn't attempt to connect to the specified socket 【发布时间】:2022-01-16 07:46:19 【问题描述】:

我正在使用 QuickFix/J 2.3.1(与 2.3.0 的结果相同)。我有一个相当简单的 spring boot 应用程序,其中一个 FIX 服务是 bean 之一。它创建了一个启动器。直到最近一切正常。突然间,我偶然发现了以下问题——quickfix 似乎甚至没有尝试打开与指定主机的连接:端口。我确实怀疑这可能与我的代码有关,但到目前为止,我不知道如何弄清楚发生了什么。

这里是初始化代码(Kotlin):

    @PostConstruct
override fun start() 
    logger.info("Using config file ", config.tradingServiceConfig.quickFixConfigFile)

    val sessionSettings = SessionSettings(config.tradingServiceConfig.quickFixConfigFile)
    val messageStoreFactory = FileStoreFactory(sessionSettings)
    val messageFactory = DefaultMessageFactory()
    initiator = SocketInitiator(
        this,
        messageStoreFactory,
        sessionSettings,
        SLF4JLogFactory(sessionSettings),
        messageFactory
    )
    logger.info("Calling initiator start")
    initiator?.start()

    logger.info("Initiator startup finished")

这是对应的日志:

2021-12-12 22:20:48.962  INFO 94182 --- [  restartedMain] i.s.trading.gateway.service.FixService   : Calling initiator start
2021-12-12 22:20:49.157  INFO 94182 --- [  restartedMain] quickfix.DefaultSessionSchedule          : [FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT] daily, 08:00:00-UTC - 08:45:00-UTC
2021-12-12 22:20:49.180  INFO 94182 --- [  restartedMain] quickfixj.event                          : FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT: Session FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT schedule is daily, 08:00:00-UTC - 08:45:00-UTC
2021-12-12 22:20:49.181  INFO 94182 --- [  restartedMain] quickfixj.event                          : FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT: Session state is not current; resetting FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT
2021-12-12 22:20:49.185  INFO 94182 --- [  restartedMain] quickfixj.event                          : FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT: Created session: FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT
2021-12-12 22:20:49.186  INFO 94182 --- [  restartedMain] i.s.t.gateway.service.FixServiceBase     : New session started: FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT
2021-12-12 22:20:49.193  INFO 94182 --- [  restartedMain] quickfix.mina.NetworkingOptions          : Socket option: SocketTcpNoDelay=true
2021-12-12 22:20:49.194  INFO 94182 --- [  restartedMain] quickfix.mina.NetworkingOptions          : Socket option: SocketSynchronousWrites=false
2021-12-12 22:20:49.194  INFO 94182 --- [  restartedMain] quickfix.mina.NetworkingOptions          : Socket option: SocketSynchronousWriteTimeout=30000
2021-12-12 22:20:49.276  INFO 94182 --- [  restartedMain] quickfixj.event                          : FIX.4.2:XXX_STAGE_UAT->YYY_XXX_STAGE_UAT: Configured socket addresses for session: [localhost/127.0.0.1:10669]
2021-12-12 22:20:49.277  INFO 94182 --- [  restartedMain] quickfix.SocketInitiator                 : SessionTimer started
2021-12-12 22:20:49.280  INFO 94182 --- [  restartedMain] i.s.trading.gateway.service.FixService   : Initiator startup finished
2021-12-12 22:20:49.280  INFO 94182 --- [ssage Processor] quickfix.SocketInitiator                 : Started QFJ Message Processor

日志中没有其他 FIX 消息,包括 quickfix 消息。我可以通过 netstat 看到,甚至没有尝试连接到指定的套接字。我尝试在调试器中停止该进程以查看发生了什么,但看不到任何明显的东西。

正如我之前所说,这在我上次尝试的一周左右之前还可以正常工作,这就是我如此困惑的原因。

关于如何调试问题的任何想法?

【问题讨论】:

能否在问题发生时创建线程转储? 【参考方案1】:

您似乎已将启动器配置为每天在 08:00:00-UTC 到 08:45:00-UTC 之间连接到接受器。

尝试增加日期范围(即 08:00:00 到 18:00:00)并查看您是否已连接。

PS:如果您使用的是 quickfixj 和 Spring,请查看 Github 中的 QuickFixJ Spring Boot starter https://github.com/esanchezros/quickfixj-spring-boot-starter

【讨论】:

好收获。看起来这可能是问题所在。 确实!我知道这会很愚蠢:) 非常感谢,你拯救了我的一天

以上是关于Quickfix/j 不尝试连接到指定的套接字的主要内容,如果未能解决你的问题,请参考以下文章

套接字:连接到 cloudsql 时不允许操作

尝试连接到已经处理请求的套接字的传入连接会发生啥?

连接到服务器时客户端套接字超时

尝试将docker容器连接到mongodb时出现异常打开套接字异常

在swift 3中无法连接到xmpp中的套接字

Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]