Шаблон проектирования для обработки исключений верблюдов? - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь определить лучший способ аккуратно обрабатывать исключения, которые происходят во время моего конвейера обработки сообщений.Из книги «Верблюд в действии» (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, так как он будет забиваться множеством исключений, которые я пытаюсь перехватить.

...