我正在使用Apache Camel 2.14.0版本。 我创建了一个路由来轮询包含XML的目录,然后将其传递给activeMQ代理。
OutOfMemoryError
它适用于小型XML(最多20Mb),但如果文件大小更多,则会提供from("file://D:/test?sortBy=file:modified&include=test_.*.xml$&noop=true").split(body().tokenizeXML("ship", "ships")).streaming().to("activemq:queue:temp.XMLFileQueue");
。
为避免这种情况,我改变了以下路线
FileNotFoundException
执行此操作后,我看到Camel正在创建多个线程来处理每个块,因此我面临一些新问题。在处理XML之后,根据我的逻辑,它应该被删除 - 之前它是单线程,所以它很好,但现在由于许多线程,1个线程删除该文件,但另一个线程仍然尝试处理该文件并抛出{{ 1}}。
如何避免这种情况?请让我知道使用单线程处理大型XML的正确方法。