有以下骆驼路线。
@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
答案 0 :(得分:3)
是的,这是预期的,onException块仅在交换耗尽时执行(例如,在所有重新传递尝试失败后)。
详细了解Camel中的错误处理如何在文档中工作
如果您有一本Camel in Action手册的副本,它有一整章专门介绍有关错误处理的所有内容(最完整的文档)
如果您想在每次重新发送之前执行一些自定义逻辑,请使用onRedelivery
处理器:http://camel.apache.org/exception-clause.html