有以下骆驼路线。
@Override
public void configure() throws Exception {
onException(java.lang.Exception.class).useOriginalMessage()
.beanRef("discoveryService", "updateConnection")
.redeliveryPolicyRef("redeliverMessagePolicy");
from(ENDPOINT_URI).to(queueName);
}
带有在XML-
<redeliveryPolicyProfile id="redeliverMessagePolicy"
retryAttemptedLogLevel="WARN" maximumRedeliveries="8"
redeliveryDelay="${redeliveryDelay}" />
但是,当引发异常时,将在执行OnException块之前进行重新交付尝试(某些配置属性在onException块中进行了更新。在Onexception中的DiscoveryService中具有调试点,在进行重新交付尝试后将调用该调试点)。因此,当前消息丢失而没有重新传递。不知道为什么会这样。
使用activemq-camel版本5.8.0
Thnks
最佳答案
是的,这是有意的,onException块仅在交换用尽时才执行(例如,在所有重新传递尝试均失败之后)。
在文档中详细了解Camel中的错误处理方式
http://camel.apache.org/error-handling-in-camel.html
而且,如果您有《骆驼在行动》一书的副本,则整章都将专门讨论错误处理的全部内容(提供了最完整的文档)
如果要在每次重新交付之前进行一些自定义逻辑,请使用onRedelivery
处理器:http://camel.apache.org/exception-clause.html