Apache Camel: errorHandler против onException?

в чем разница между:

<camel:errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" 
        deadLetterUri="log:dead">

<camel:camelContext errorHandlerRef="deadLetterErrorHandler">
    ...
</camel:camelContext>

и:

<onException>
    ...
</onException>

по данным в этой статье, использование их обоих в сочетании является "мощной комбинацией". Как так? Какие роли каждый из них принимает на себя и как они дополняют друг друга?

2 ответов


на errorHandler используется для обработки любого uncaught Exception который выбрасывается во время маршрутизации и обработки сообщения. И наоборот, onException используется для обработки специфических Exception типы, когда их бросают. Проверьте в этой статье чтобы увидеть, как использовать onException.


Если действие, которое необходимо выполнить для каждого типа исключения, отличается, используйте onException. Это позволяет определить обработку ошибок на основе исключений.

onException(xxxException.class).to("activemq:xxxFailed"); onException(yyyException.class).to("activemq:yyyFailed");

Если вам просто нужен общий обработчик, перейдите к errorHandler. Для всех типов ошибок будет выполняться одна и та же обработка.