QuickFIX/J消息未送达应用线程问题排查咨询
QuickFIX/J 消息丢失与调度器缓冲区溢出的关联
- 这种情况是完全可能发生的。QuickFIX/J的NioProcessor线程负责接收并完成FIX消息的初步解析与日志记录,之后会把消息投递到
QF/J Session Dispatcher线程对应的任务队列中等待执行。 - 当Dispatcher线程处理业务逻辑的速度跟不上NioProcessor接收消息的速率时,任务队列会持续积压。一旦队列长度达到配置的上限(默认由
session.queueCapacity参数控制,默认值一般为1000),后续新接收的消息会被直接丢弃,自然不会出现在Dispatcher线程的处理流程里。 - 你可以检查QuickFIX/J的运行日志,如果存在
Queue full, dropping message这类警告日志,就能直接确认是缓冲区溢出导致的消息丢失。 - 可行的优化方向:
- 优先优化监听器中的业务代码,减少Dispatcher线程的处理耗时
- 适当调大
session.queueCapacity参数值(注意避免过大导致内存占用过高) - 若使用的QuickFIX/J版本支持,可配置
session.dispatcherThreadPoolSize参数启用多Dispatcher线程并行处理任务
内容的提问来源于stack exchange,提问作者dbf
相关产品推荐
相关产品推荐

