2016-02-11 1 views
0

Есть следующий маршрут верблюда.Apache Camel-Message Redelivery происходит до того, как один блок блокировки исполняется

@Override 
public void configure() throws Exception { 

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

from(ENDPOINT_URI).to(queueName); 
} 

с политикой Redelivery, определенной следующим образом в xml-

<redeliveryPolicyProfile id="redeliverMessagePolicy" 
    retryAttemptedLogLevel="WARN" maximumRedeliveries="8" 
    redeliveryDelay="${redeliveryDelay}" /> 

Однако, когда возникает исключение попытки Redelivery сделаны до того, как блок OnException выполняется (Некоторые свойства конфигурации обновляются в блоке OnException У вас есть отладочная точка в DiscoveryService внутри Onexception, она вызывается после попытки повторной доставки). Таким образом, текущее сообщение теряется без повторной доставки. Не знаю, почему это происходит. Использование ActiveMQ-верблюд версия 5.8.0 Thnks

ответ

2

Да это предназначено, блок OnException только выполняется, когда обмен исчерпала (например, после того, как все попытки Redelivery потерпели неудачу).

Узнайте больше о том, как обработка ошибок в Camel работает в документации

И если у вас есть копия Верблюд в действии забронировавших имеет целую главу, посвященную, чтобы охватить все об обработке ошибок (самая полная документация есть)

Если вы хотите выполнить какую-либо пользовательскую логику перед каждой повторной доставкой, используйте процессор onRedelivery: http://camel.apache.org/exception-clause.html

+0

Большое спасибо Клаус .. – Rehan

Смежные вопросы