当前位置: 首页 > 知识库问答 >
问题:

异常处理骆驼

刁俊人
2023-03-14

我正在尝试从目录中选取一个文件,拆分一个文件,并将每一个拆分行添加到ActiveMQ中。我在这个过程中遇到了异常处理的问题。假设目录中的文件是一个二进制文件(可执行文件),那么splitter会显示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个答案

沃侯林
2023-03-14

正如@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的格式

 类似资料:
  • 在camel spring ws中,有没有办法将自定义主体(例如自定义bean)和http状态返回为500? 我试过了 然后在processor公共类ExceptionProcessor实现processor{ } 但是即使身体是我想要的,超文本传输协议状态总是200。 你能帮我吗? 更多信息:我正在使用camel 2.20.2版

  • 我有一个队列系统,骆驼只是其中的一小部分。在此队列系统中,对于某些队列,代理在队列已满时返回 FAIL。为了解决这个问题,我查看我得到的 JMS 异常,从消息中我可以看到原因是否是队列已满。 我想在Camel中实现的是,对于满队列的特定情况,我希望重试传递,而对于任何其他JMS异常(或任何其他异常),我希望将其发送到DLQ。 我假设我必须使用onException(JMSException.cla

  • 我不知道该怎么办。 当我试图从解析器获取语法错误的数量时,它显示0。 编辑: 它返回null。

  • Blade 内置了 异常处理器,在开发者模式下它会将异常输出在前端页面,并在控制台打印堆栈信息,生产环境只打印在控制台。 有些时候不满足我们的需求,这时候就需要自定义异常处理了,比如针对某个自定义的异常进行特殊处理。 我们用一个例子来解释如何操作。 定义了一个名为 TipException 的运行时异常类,用于输出错误消息到前台。 按照上面对异常的处理情况这个异常的堆栈信息会被输出在控制台,生产环

  • 任何方法都可以抛出不同类型的异常。这些异常可能是需要应用程序重新部署来解决的编程错误,或者是不需要重新部署但可以解决的暂时性错误。 Hangfire可以处理所有内部的(属于Hangfire本身)和相关的外部方法(任务,过滤器等)的异常,因此不会导致整个应用程序被关闭。所有内部异常都被记录(所以不要忘记 启用日志),最糟糕的情况是导致后台任务被暂停并延时重试 10 次。 当Hangfire遇到在执行

  • 我们在编写程序的时候,经常需要对异常情况做处理。比如,当一个数试图除以 0 时,我们需要捕获这个异常情况并做处理。你可能会使用类似 if/else 的条件语句来对异常情况做判断,比如,判断除法的分母是否为零,如果为零,则打印错误信息。 这在某些简单的情况下是可以的,但是,在大多数时候,我们应该使用 Python 的异常处理机制。这主要有两方面的好处: 一方面,你可以选择忽略某些不重要的异常事件,或