Apache Компонент Camel onExceptionOccurrent не восстанавливается, как указано выше - PullRequest
0 голосов
/ 23 января 2020

У меня есть Apache верблюжий маршрут, который вызывает компонент рестлета. Чтобы лучше понять, что происходит во время выполнения, я также сохраняю состояние выполнения в базе данных (количество повторных попыток, последнее состояние выполнения). Я хотел бы использовать механизм повторной доставки из обработчика исключений, но он выполняет некоторую обработку при каждой неудаче обновления записи в моей базе данных.

<bean class="com.tcl.ExceptionOccurredRefProcessor" id="exProc" />
<camelContext errorHandlerRef="eh">
<errorHandler id="eh" onExceptionOccurredRef="exProc"> <redeliveryPolicy 
            maximumRedeliveries="3" maximumRedeliveryDelay="2000" 
            retryAttemptedLogLevel="WARN" />
</errorHandler>
<to uri="-------"/> //Invoke rest service
<onException id="_onException1" onExceptionOccurredRef="exProc" useOriginalMessage="true">
                <exception>java.lang.Exception</exception>
                <handled>
                    <simple>true</simple>
                </handled>
                ...........
   </onException>
</camelContext>

Для этого я попытался использовать компонент onExceptionOccurred с компонентом redelivery и сослался на camelContext, как в приведенном выше коде, но сообщение было доставлено только один раз и остановило выполнение.

Any предложения, пожалуйста?

1 Ответ

0 голосов
/ 23 января 2020

Прежде всего: вставленный вами код немного сбивает с толку, потому что нет верблюжьего маршрута, просто простой элемент to, который не может быть один в контексте верблюда.

Однако, я полагаю, ваша проблема в «скрытой» обработке верблюдов. Как задокументировано в Camel Docs из условия исключения , предложение onException переопределяет maximumRedeliveries на 0 по умолчанию , если только вы явно не установите опцию.

<onException>
    <exception>java.lang.Exception</exception> // max. redelivery = 0
</onException>

<onException>
    <exception>java.lang.Exception</exception> 
    <redeliveryPolicy maximumRedeliveries="3"/> // max. redelivery = 3
</onException>

Я не уверен насчет других опций повторной доставки, таких как maximumRedeliveryDelay, но, по крайней мере, maximumRedeliveries переопределяется, если явно не установлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...