我有一个目录,文件通过骆驼路由被推送到这个目录。从同一个目录中,我需要多个线程来消耗和处理这些文件,我知道使用1个线程,readLock=changed会带来至少1000ms的延迟。
<route id="processMessagesFromDirectory">
<from uri="file:/directory?readLock=changed" />
<threads poolSize="8"></threads>
<doTry>
<log message="process Initiated for ${body}" />
<doCatch>
<exception>java.lang.Exception</exception>
</doCatch>
</doTry>
<log message="Processed ${body}" />
</route>
我知道使用1个线程,readLock=changed会带来至少1000ms的延迟。使用多个线程,同样的事情发生了,一个线程在等待1000ms的时间取走一个文件并处理,然后另一个线程取走另一个文件并处理,以此类推。使用readLock=changed选项到底是怎么回事?如何引入并行性?
我通过不使用readLock=markerFile选项能够并行处理它们,但我不想处理部分消息,也不想多次处理消息。我怎样才能做到这一点?
如果你需要使用 readLock
,您可以将其值设置为 markerFile
. 这将使文件得到异步处理。
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="processMessagesFromDirectory">
<from uri="file:/directory?readLock=markerFile" />
<threads poolSize="8" />
<doTry>
<log message="process Initiated for ${body}" />
<doCatch>
<exception>java.lang.Exception</exception>
</doCatch>
</doTry>
<log message="Processed ${body}" />
</route>
</routes>