所以我不确定这是如何运作的。我有一个" 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毫秒?
答案 0 :(得分:2)
Camel最初将根据您编写的顺序选择。 &#34; ..配置onException的顺序优先。 Camel将从第一个...最后定义测试。&#34;
直接来自文档:
因此,如果使用此层次结构抛出异常: + RuntimeCamelException(Camel的包装器异常)+ OrderFailedException + IOException + FileNotFoundException
然后Camel将尝试按以下顺序测试异常: FileNotFoundException,IOException,OrderFailedException和 RuntimeCamelException。正如我们所定义的那样 onException(IOException.class)Camel将选择它作为它 最接近的匹配。
基于这个例子,我假设
SocketException
将被触发并重新开始,因为它具有完全匹配,并且在Camel开始查找匹配的堆栈跟踪中较低。