Глобальный обработчик исключений в контексте верблюда, охватывающий все маршруты

У меня есть 10 верблюжьих маршрутов, как показано ниже:

@AllArgsConstructor
public class MyCamelRoute extends RouteBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {
    }
}  

Выше MyCamelRoute создается с использованием приведенного ниже кода, который загружает маршрут Camel в контейнер Spring:

 @Bean("myCamelRoute")
 public RouteBuilder createMyCamelRoute () {
        return new MyCamelRoute();
 }

Теперь мне нужен глобальный обработчик исключений в контексте Camel, охватывающий все маршруты.


person rocky    schedule 20.01.2019    source источник


Ответы (1)


Вы можете определить глобальное исключение для всех маршрутов, определенных внутри Routebuilder, из camel документация

Глобальная область действия для Java DSL предназначена для каждого экземпляра RouteBuilder, поэтому, если вы хотите совместно использовать несколько классов RouteBuilder, создайте базовый абстрактный класс RouteBuilder и поместите логику обработки ошибок в его метод configure. А затем расширьте этот класс и обязательно классируйте super.configure(). Мы просто используем технику наследования Java.

Другими словами, класс BaseRouteBuilder будет:

public abstract BaseRouteBuilder extends RouteBuilder {

@Override
public void configure() {
   onException(Throwable.class).log("Excpetion caught");
}

И затем ваши маршруты:

@AllArgsConstructor
public class MyCamelRoute extends BaseRouteBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {
        super.configure();
        // Route Configuration here
    }

}

Как уже отмечалось, важно вызывать super.configure() из дочернего класса, иначе предложение исключения не будет выполнено.

person danielorn    schedule 20.01.2019