You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

父Router统一异常处理:子Router异常仅设Exchange属性后交父路由处理

解决方案

Camel 路由级onException默认捕获异常后会终止异常向上传播,你当前的写法会导致子路由处理完加属性的逻辑后,异常被直接截断,无法流转到父路由的全局异常处理器,按以下方式调整即可实现需求。

修正后代码

public class ParentRouter extends RouteBuilder {
    @Override 
    public void configure() throws Exception {
        // 父路由全局异常处理,作为最终异常处理逻辑执行
        onException(CustomException.class)
            .process(new ExceptionProcessor())
            .handled(true);

        from("direct:parent-route")
            .to("direct:child-route");

        from("direct:child-route")
            .onException(CustomException.class)
                // 第一步:执行子路由自定义逻辑,给Exchange打异常标记
                .process(new Processor(){
                    @Override 
                    public void process(Exchange exchange){
                        exchange.setProperty("childExceptionFlg", "true");
                    }
                })
                // 关键配置:声明当前异常未被处理,继续向上抛给父路由
                .handled(false)
                .end()
            // 此处为子路由原有业务逻辑
            .throwException(new CustomException("子路由触发测试异常"));
    }
}

核心配置说明

  • 子路由的异常处理块必须显式配置.handled(false):该配置会告知Camel,当前异常处理器仅做前置属性注入逻辑,没有完成异常的最终处理,执行完配置的Processor后,会将原始异常沿着路由调用栈继续向上传递,父路由配置的全局onException就能正常捕获异常,执行ExceptionProcessor中的最终处理逻辑。
  • 子路由的onException块需要用.end()闭合,避免后续业务逻辑被错误归到异常处理分支中。
  • 不要在子路由异常处理块中添加handled(true)、transform、to等会终结异常传播的操作,否则会导致异常无法流转到父路由。

内容的提问来源于stack exchange,提问作者jbabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.09 16:15:44