有以下骆驼路线。

@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

08-04 15:33