首页 > 解决方案 > 如何在 RouteTemplate 上添加全局异常处理

问题描述

我正在寻找一种在多个 RouteTemplates 生成的所有路由上添加全局异常处理的方法。我尝试了以下方式,但 onException 块没有被添加到路由中。

你能帮我理解我做错了什么吗?

谢谢

public abstract class BaseRouteBuilder extends RouteBuilder {
    @Override
    public void configure(){
        this.onException(IllegalStateException.class)
                .log("global onException")
                .maximumRedeliveries(2)
                .redeliveryDelay(100)   
                .logStackTrace(true)
                .to("direct:retryChannel");
    }
}
public static class SampleRouteTemplate extends BaseRouteBuilder {
        @Override
        public void configure() {
            super.configure();
            this.routeTemplate("myTemplate")
                    .templateParameter("parameter1")
                    .from("direct:start")
                    .setHeader("parameter1", constant("value1"))
                    .log("RouteCompleted");
        }
    }

标签: spring-camelapache-camel-3

解决方案


尝试为路由提取一个单独的方法,例如configureRoute()并在configure() method. 还要使子类成为非静态的。

public abstract class BaseRouteBuilder extends RouteBuilder {
    @Override
    public final void configure(){
        onException(IllegalStateException.class)
            .log("global onException")
            .maximumRedeliveries(2)
            .redeliveryDelay(100)   
            .logStackTrace(true)
            .to("direct:retryChannel");
            
        configureRoute();
    }
    
    public abstract void configureRoute();
}
public class SampleRouteTemplate extends BaseRouteBuilder {
        @Override
        public void configureRoute() {
            this.routeTemplate("myTemplate")
                .templateParameter("parameter1")
                .from("direct:start")
                .setHeader("parameter1", constant("value1"))
                .log("RouteCompleted");
        }
    }
}

推荐阅读