quickfixj 消息未传递到应用程序线程

问题描述 投票:0回答:1

我在我的java应用程序中使用quickfixj来处理修复会话。 通常,每个传入消息最初都会记录在某个线程中,例如 [NioProcessor-12],据我了解,这是一些 IO 线程,然后出现在 [QF/J Session Dispatcher] 线程中,该线程在侦听器中调用我的应用程序代码。

我最近遇到一个情况,我的调度程序代码在处理传入的修复消息时速度很慢,并且在调查过程中我看到很多消息是由 Quickfix 在 NioProcessor 线程中记录的,但没有出现在 Session Dispatcher 线程中。

如果调度程序速度很慢,是否有任何缓冲区/等可能会溢出,从而导致消息以某种方式丢失?

谢谢。

quickfix quickfixj
1个回答
0
投票

您的

MessageDispatchingThread
可以通过两种方式进行配置。 可以使用普通队列(默认容量 10000,您可以传递其他大小),也可以使用基于水印的队列(您可以传入您想要的高/低水印)。

由于默认队列是

LinkedBlockingQueue
,因此当没有可用空间时它将阻塞。从长远来看,当您的应用程序无法及时处理心跳消息时,这将导致连接断开。

水印队列将在达到高水印时通过暂停套接字读取来限制传入消息,并在达到低水印时恢复读取消息。当您的应用程序持续缓慢时,当套接字缓冲区溢出或您没有及时处理心跳时,它也会中断连接。

© www.soinside.com 2019 - 2024. All rights reserved.