问题描述
我的骆驼路线的一部分是从服务器读取文件并分析其内容以丰富主要路线。
因此,我不能使用.from(filesFolder)。我以为使用pollEnrich将是一个解决方案,但是由于它只选择一个文件,因此我不得不循环(这里使用loopDoWhile)。
String filesSource = "file:////server/folder/?move=proc&sendEmptyMessageWhenIdle=true";
this.from("direct:start") //
.loopDoWhile(new BatchNotFinishedPredicate()) //
.pollEnrich(filesSource,new PollEnrichStrategy()) //
.choice() //
.when(doProcesspredicate) //
.log(LoggingLevel.INFO,"- processing ${file:path}.") //
.endChoice() //
.otherwise() //
.log(LoggingLevel.INFO,"- NOT processing ${file:path}.") //
.endChoice() //
.end() //
.end() //
; //
问题在于,文件全部被锁定,保留在内存中,直到整个文件夹完成后才释放。
因此,这对于几个文件可以很好地工作,但是对于成千上万个文件(如需要),它速度很慢,一个小时左右就会出现“内存不足”的情况。
几个小时就可以了,但是一次需要锁定+处理+解锁几个文件。
我正在寻找可以在pollEnrich(或loopDoWhile?)中设置的某些参数,以产生预期的行为而不会遇到麻烦。
在“文件”中,我测试了参数“ maxMessagesPerPoll = 2”。这将处理2个文件并停止轮询。
有什么想法吗?
“ localworkdirectory”似乎提供了更好的性能,但不能解决锁定/解锁所有文件的主要问题。
骆驼版本为 2.18.0 +无法升级:(
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)