我一直遇到两个问题,不知道如何解决。
根据我的理解,每个消息轮询需要 1 个线程。我将任务执行器池大小设置为 50,并将文件适配器设置为每次轮询最多 25 条消息的固定速率。那么,如果最多使用 50 个线程中的 25 个,问题 2) 会如何发生?
我还使用事务管理器/同步工厂在处理后删除每个文件。这对上面有影响吗?
不,逻辑是这样的:
this.taskExecutor.execute(() -> {
int count = 0;
while (this.initialized && (this.maxMessagesPerPoll <= 0 || count < this.maxMessagesPerPoll)) {
if (this.maxMessagesPerPoll == 0) {
logger.info("Polling disabled while 'maxMessagesPerPoll == 0'");
break;
}
if (pollForMessage() == null) {
break;
}
count++;
}
});
因此,整个
maxMessagesPerPoll
批次使用一个线程。显然您有太多文件需要从目录中提取。另外,听起来这些文件的处理速度太慢,无法在其中堆积任务。我们需要查看更多配置和流程逻辑,以确定这些线程到底卡在哪里。您可以使用 JConsole 来观察那些内存泄漏和阻塞线程。