Apache camel 骆驼文件轮询-将文件移动到已处理路径而不进行处理
下面是延迟设置为2000的camel文件路由,它持续轮询文件夹Apache camel 骆驼文件轮询-将文件移动到已处理路径而不进行处理,apache-camel,Apache Camel,下面是延迟设置为2000的camel文件路由,它持续轮询文件夹{ResponsePath},并在完成时将其移动到路径{ResponseProcessed},在失败时将其移动到路径{responsepailed} <route id="fileProcessor"> <from uri="file://{{ResponsePath}}?preMove={{ResponseInProgressPath}}/${header.CamelFileNameOnly}&am
{ResponsePath}
,并在完成时将其移动到路径{ResponseProcessed}
,在失败时将其移动到路径{responsepailed}
<route id="fileProcessor">
<from uri="file://{{ResponsePath}}?preMove={{ResponseInProgressPath}}/${header.CamelFileNameOnly}&move={{ResponseProcessed}}/${header.CamelFileNameOnly}&moveFailed={{ResponseFailed}}/${header.CamelFileNameOnly}&delay=2000"/>
<doTry>
<convertBodyTo type="java.lang.String"/>
<log message="Response ${body}"/>
<bean ref="fileProcessorBean" method="processFile" />
<log message="File Processed Successfully"/>
<doCatch>
<exception>com.test.CustomFileException
</exception>
<handled>
<constant>true</constant>
</handled>
</doCatch>
</doTry>
</route>
com.test.CustomFileException
真的
我面临的问题是将多个文件加载到轮询文件夹中,一些文件被处理并移动到已处理路径,一些文件被直接移动到已处理路径而不进行处理正如@Screwtape已经评论过的那样,所有文件都被移动到已处理路径,因为您捕获并处理异常
- 文件被消耗
- 它在try块中处理
- 如果一切顺利,文件使用者会将其移动到已处理路径
- 如果发生异常,则由catch块处理
- 因此异常不会到达文件使用者
- 因此,文件使用者认为一切顺利,并将其移动到已处理路径
删除整个doTry/doCatch块,以便异常到达文件使用者,并将这些文件移动到失败路径。Hi!您的异常处理程序似乎会使一切都成功。如果删除异常处理程序,是否有一些异常处理程序会失败?您好。是,它也会移动到失败的文件夹路径。如果您知道为什么要处理的一些文件在未经处理的情况下被移动到“已处理”,我将不胜感激。但是文件路由部署在多个tomcat loadbalanced服务器中。路径是共享文件夹,是否还缺少其他内容?即使在删除了try-catch之后,同样的结果是OK,那么当您只有一个消费者时,是否也会发生这种情况将是一件有趣的事情。只是想知道这是路由问题还是并发问题。事实上,使用多个服务器非常重要。您正在使用no
readLock
选项。查看文档并选择与您的环境相关的文档。但是,如果您的共享驱动器不支持分布式文件锁,您将面临艰难的选择。大多数锁无法与共享驱动器的竞争对手可靠地工作。如果您需要100%安全的东西,您可能会得到readLock=idempotent
和一些支持分布式地图上原子操作的idempotentRepository
(infinispan、hazelcast等)。