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

从Apache Camel 3迁移到4:移除adapt()后如何动态操作路由定义?

Apache Camel 4 动态路由操作实现方案(从Camel 3迁移)

问题背景

从Apache Camel 3升级到4版本后,CamelContext.adapt()方法被移除,无法再通过该方式获取ModelCamelContext实例来动态操作路由。官方迁移指南仅提示使用getCamelContextExtension替代,但未给出具体兼容实现。

以下是针对获取路由定义、移除路由、添加新路由、操作路由输出这几个需求的具体实现方式:

1. 获取路由定义

通过CamelContext获取ModelCamelContextExtension实例,替代原有的adapt()方式:

// 获取ModelCamelContextExtension
ModelCamelContextExtension modelExtension = context.getCamelContextExtension(ModelCamelContextExtension.class);
// 根据路由ID获取RouteDefinition
RouteDefinition route = modelExtension.getRouteDefinition(routeId);

2. 从上下文移除路由

移除路由需要先停止目标路由,再通过扩展实例删除路由定义:

// 停止目标路由
context.stopRoute(routeId);
// 移除路由定义
modelExtension.removeRouteDefinition(routeId);
// 可选:彻底清理路由实例
context.removeRoute(routeId);

3. 添加新的路由定义

直接使用ModelCamelContextExtension的addRouteDefinition方法,添加后启动路由:

// 构建新的RouteDefinition
RouteDefinition newRoute = new RouteDefinition();
newRoute.setId("new-route-id");
newRoute.from("direct:new-input")
        .to("log:new-route-log");

// 添加路由定义
modelExtension.addRouteDefinition(newRoute);
// 启动新路由
context.startRoute("new-route-id");

4. 操作路由输出(调用getOutputs)

获取到RouteDefinition实例后,可直接调用getOutputs()方法操作其输出节点,用法和Camel 3一致:

// 获取路由的输出节点列表
List<ProcessorDefinition<?>> outputs = route.getOutputs();
// 对输出节点进行操作,比如添加新处理器
outputs.add(new ToDefinition("log:updated-output"));
// 更新路由定义并重启路由使变更生效
modelExtension.updateRouteDefinition(routeId, route);
context.stopRoute(routeId);
context.startRoute(routeId);

注意:修改路由定义后,必须重启对应路由才能让变更生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:10