Camel onException重新传递澄清

时间:2016-08-29 14:35:57

标签: apache-camel

所以我不确定这是如何运作的。我有一个" Broken Pipe"偶尔发生的异常。它会触发2个异常(根据日志):org.apache.camel.component.file.GenericFileOperationFailedException由于文件无法到达其端点和java.net.SocketException,因为这是文件为什么没有的根本原因。能够到达终点。

为了解决这个问题,我有一个<onException>块,看起来像这样:

<onException>
        <exception>org.apache.camel.component.file.GenericFileOperationFailedException</exception>
        <exception>java.net.SocketException</exception>
        <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="5000"/>
</onException>

根据我的理解,Camel应该选择GenericFileOperationFailedException,然后尝试执行2个Redeliveries,相隔5000毫秒。

那么如果在这两次尝试中无法重新发送会发生什么,Camel会因为抛出错误的性质而选择SocketException吗?

意味着Camel将尝试4次总重新传输,总共需要20000毫秒?

1 个答案:

答案 0 :(得分:2)

Camel最初将根据您编写的顺序选择。 &#34; ..配置onException的顺序优先。 Camel将从第一个...最后定义测试。&#34;

直接来自文档:

  

因此,如果使用此层次结构抛出异常:   + RuntimeCamelException(Camel的包装器异常)+ OrderFailedException          + IOException               + FileNotFoundException

     

然后Camel将尝试按以下顺序测试异常:   FileNotFoundException,IOException,OrderFailedException和   RuntimeCamelException。正如我们所定义的那样   onException(IOException.class)Camel将选择它作为它   最接近的匹配。

基于这个例子,我假设

  

SocketException

将被触发并重新开始,因为它具有完全匹配,并且在Camel开始查找匹配的堆栈跟踪中较低。