检索/保留文件 - 如果在Apache Camel中使用带有onexception的“try .. catch”时catch块捕获到异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检索/保留文件 - 如果在Apache Camel中使用带有onexception的“try .. catch”时catch块捕获到异常相关的知识,希望对你有一定的参考价值。

在以下路线中,我使用“try..catch”和onexception功能。如果我的bean或外面的行中有任何异常,则try block..file被移动到“.error”,因为我使用了moveFailed选项但是在异常期间,由try块的行生成的catch块捕获,文件丢失了..

    1.when server is down
    2.when connection timeout

请建议在此类故障/异常期间保留文件的方法

<camelContext streamCache="false" useMDCLogging="true" id="XXX" xmlns="http://camel.apache.org/schema/spring">
    <streamCaching spoolDirectory="/tmp/cachedir/#camelId#/#uuid#" spoolUsedHeapMemoryThreshold="70" bufferSize="65536" anySpoolRules="true" id="myCacheConfig"/>
    <onException >
        <description>An exception was encountered.</description>
        <exception>java.lang.Exception</exception>
        <log message="somemessage" loggingLevel="INFO"/>
    </onException>   
<route >        
    <from uri="file:D:/Users/Desktop/src?moveFailed=.error" />
    <transform>
        <method ref="somebean" method="somemethod"/>
    </transform>
    <doTry>  
        <to uri="file:D:/Users/Desktop/src" /> 
         <log message="transfered successfully" />           
         <doCatch>
            <exception>java.lang.Exception</exception>
                <log message="Exception occurred and Stopping the Route"/>
                <to uri="controlbus:route?routeId=XXXX&amp;action=stop"/>                       
               <log message="Stopped the Route:XXX"/>
        </doCatch>
    </doTry> 
</route>

请建议在此类故障/异常期间保留文件的方法

答案

重新抛出docatch-block中的异常以到达onException块。

     <doCatch>
        <exception>java.lang.Exception</exception>
            <log message="Exception occurred and Stopping the Route"/>
            <to uri="controlbus:route?routeId=XXXX&amp;action=stop&amp;async=true"/> // async=true to resume/finish this route                       
           <log message="Stopped the Route:XXX"/>
           <throwException  exception="java.lang.Exception"/> // dont know the exact syntax in xml dsl
    </doCatch>

以上是关于检索/保留文件 - 如果在Apache Camel中使用带有onexception的“try .. catch”时catch块捕获到异常的主要内容,如果未能解决你的问题,请参考以下文章

Apache Camel中的OnCompletion用于整个文件的完成

文件目录无法从 apache camel 上传 azure blob 上的文件

如何在apache camel中附加速度文件内容

Apache Camel 的替代品是啥 [关闭]

Apache Camel 压缩包

如何使用 Apache Camel 来监控文件更改?