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

如何获取Camel路由中故障节点Endpoint URI并传入自定义处理器

问题描述

我正在开发一个示例路由,路由结构如下:

  • FROM: SOURCE ENDPOINT URI
  • TO: TRANS ENDPOINT URI // 该TRANS端点处会发生错误或异常
  • TO: TARGET ENDPOINT URI

需求为捕获抛出异常的故障端点URI,将其传递给自定义处理器。
对应的示例路由配置代码如下:

<route>
    <from uri="file:C:/MINTS/Source/"/>
    <to uri="file:C:/MINTS/TRANS/"/>  <!-- 异常在此处抛出 -->
    <to uri="file:C:/MINTS/TARGET/"/>
    
    <onException>
        <exception>java.lang.Exception</exception>
        <handled>
            <constant>true</constant>
        </handled>
        
        <!-- 需要在此处捕获故障端点URI,传递给下方的自定义处理器 -->
        <process ref="MyExceptionProcessor" />
    </onException>
</route>
实现方法

Camel在路由调用端点抛出异常时,会自动将故障端点的URI存入Exchange的Exchange.FAILURE_ENDPOINT属性中,不需要额外修改路由配置,直接在自定义处理器中读取该属性即可拿到目标值。

自定义处理器示例代码:

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class MyExceptionProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        // 获取发生故障的端点URI
        String failedEndpoint = exchange.getProperty(Exchange.FAILURE_ENDPOINT, String.class);
        
        // 如果需要获取捕获到的异常对象,可读取以下属性
        // Exception caughtEx = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

        // 编写自定义业务逻辑即可
    }
}

补充说明:

  • 该属性由Camel内核自动填充,只要异常是在端点调用阶段抛出,就能准确获取到对应的故障端点地址,适配当前的路由结构。
  • 如果需要全局生效该异常处理逻辑,可以将<onException>块移到路由外部的Camel上下文级别配置中,属性读取逻辑不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:18:35