Я пытаюсь определить лучший способ аккуратно обрабатывать исключения, которые происходят во время моего конвейера обработки сообщений.Из книги «Верблюд в действии» (2-е издание) на странице 500 вы можете реализовать интерфейс процессора с помощью чего-то вроде (псевдокод):
public class MyFailureResponseProcessor implements Processor {
// Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
// if exception is java.net.UnknownHostException.class do {...}
// if exception is org.springframework.jdbc.CannotGetJdbcConnectionException.class
// if exception is org.apache.camel.TypeConversionException.class ...
// if exception is org.springframework.jdbc.BadSqlGrammarException.class
// if exception is org.springframework.dao.DuplicateKeyException.class
// ...
В моей основной конфигурации построителя маршрутов я могу использовать что-то вроде (псевдокод)):
errorHandler(defaultErrorHandler().useOriginalMessage().onPrepareFailure(new MyFailureResponseProcessor()));
Является ли вышеуказанный шаблон дизайна неуклюжим или неправильным?Я заметил, что в:
Настройка глобального обработчика ошибок для верблюда?
Было предложено создать абстрактный базовый класс и определить глобальный обработчик ошибок в методе конфигурации.,Мой текущий класс маршрута расширил бы это.Приведенный выше метод выглядит более понятным, поскольку я могу поместить все свои исключения в одном месте.Я запутался с количеством способов, которыми вы можете скинуть это.Я пытаюсь избежать использования onException в своем основном классе конфигурации Route, так как он будет забиваться множеством исключений, которые я пытаюсь перехватить.