Apache Camel-消息重新传递在onexception块执行之前发生

时间:2016-02-11 05:13:05

标签: java apache-camel activemq

有以下骆驼路线。

@Override
public void configure() throws Exception {

onException(java.lang.Exception.class).useOriginalMessage()
.beanRef("discoveryService", "updateConnection")
.redeliveryPolicyRef("redeliverMessagePolicy");

from(ENDPOINT_URI).to(queueName);
}

在xml -

中将Redelivery策略定义如下
<redeliveryPolicyProfile id="redeliverMessagePolicy"
    retryAttemptedLogLevel="WARN" maximumRedeliveries="8"
    redeliveryDelay="${redeliveryDelay}" />

但是,当抛出异常时,在执行OnException块之前进行重新传递尝试(在onException块中更新某些配置属性。在Onexception中的DiscoveryService中有一个调试点,在重新传递尝试后调用它) 。因此,当前消息在没有被重新传递的情况下丢失。不知道为什么会这样。 使用activemq-camel版本5.8.0 Thnks

1 个答案:

答案 0 :(得分:3)

是的,这是预期的,onException块仅在交换耗尽时执行(例如,在所有重新传递尝试失败后)。

详细了解Camel中的错误处理如何在文档中工作

如果您有一本Camel in Action手册的副本,它有一整章专门介绍有关错误处理的所有内容(最完整的文档)

如果您想在每次重新发送之前执行一些自定义逻辑,请使用onRedelivery处理器:http://camel.apache.org/exception-clause.html