处理Camel的异常

时间:2015-07-13 13:11:33

标签: apache-camel activemq

我正在尝试从目录中选择一个文件,拆分文件并将每个拆分行添加到activemq。我在此过程中遇到异常处理问题。让我们说目录中的文件是二进制文件(可执行文件),然后拆分器会发出org.apache.camel.RuntimeCamelException和java.nio.charset.MalformedInputException异常。如果发生这种情况,那么我需要捕获这些异常,不应该在activemq中添加任何内容,并且只有特定的线程应该在记录异常后退出。在线推荐并编写了以下代码,但不知道如何停止添加到activemq并退出特定线程。

<route id="msg_producer">
        <from uri="input.file.from" />
        <doTry>
        <split parallelProcessing="true" executorServiceRef="msgProducer"
            streaming="true">
            <tokenize token="\n"></tokenize>
            <to uri="input.activemq.to" />
        </split>
        <doCatch>
            <exception>org.apache.camel.RuntimeCamelException</exception>
            <exception>java.nio.charset.MalformedInputException</exception>
                <handled> <constant>true</constant></handled>
                <setBody>
                    <simple>${exception.stacktrace}</simple>
                </setBody>
                <setHeader headerName="CamelFileName">
                    <simple>${file:onlyname.noext}_error.log</simple>
                </setHeader>
        </doCatch>
        </doTry>
    </route>

1 个答案:

答案 0 :(得分:1)

正如@claus Ibsen所说过滤文件你可以使用filefilter属性,这样你只能选择基于扩展名的文件和一些像这样的标准模式

    <bean id="FileFilter" class="org.apache.camel.component.file.AntPathMatcherGenericFileFilter">
    <!--        ?   matches one character
                *   matches zero or more characters
                **  matches zero or more directories in a path -->
    <property name="includes" value="#{databaseProperties.getProperties().getProperty('file.name.pattern')}"/>
    <!-- if you wan to exclude specific files say bad in name or .exe files. Use comma to separate multiple excludes -->
    <!-- <property name="excludes" value="**/*bad*,**/*.exe"/> -->
    </bean>

并且你的file.name.pattern可以是这样的** / contract.csv