Apache camel 骆驼文件轮询-将文件移动到已处理路径而不进行处理

Apache camel 骆驼文件轮询-将文件移动到已处理路径而不进行处理,apache-camel,Apache Camel,下面是延迟设置为2000的camel文件路由,它持续轮询文件夹{ResponsePath},并在完成时将其移动到路径{ResponseProcessed},在失败时将其移动到路径{responsepailed} <route id="fileProcessor"> <from uri="file://{{ResponsePath}}?preMove={{ResponseInProgressPath}}/${header.CamelFileNameOnly}&am

下面是延迟设置为2000的camel文件路由,它持续轮询文件夹
{ResponsePath}
,并在完成时将其移动到路径
{ResponseProcessed}
,在失败时将其移动到路径
{responsepailed}

<route id="fileProcessor">
    <from uri="file://{{ResponsePath}}?preMove={{ResponseInProgressPath}}/${header.CamelFileNameOnly}&amp;move={{ResponseProcessed}}/${header.CamelFileNameOnly}&amp;moveFailed={{ResponseFailed}}/${header.CamelFileNameOnly}&amp;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等)。