Apache Camel Java DSL 如何为路由定义动态添加处理器名称列表
动态添加处理器到Apache Camel路由的实现方案
完全可以实现,你不需要使用运行时的loop系列组件,只需在路由构建阶段遍历处理器名称列表,动态拼接流式路由定义即可。
修改后的代码示例如下:
protected void setupRoute(String routeKey, String nbiSystemName, String requestEndpointUrl, String defaultSbi, String reqSwitchRouteId, ArrayList<String> processorNames) { // 先把前面的路由定义存为RouteDefinition变量 RouteDefinition route = from(requestEndpointUrl) .routeId(routeKey).transacted() .setProperty(PROPERTY_CBS_STARTTIME, simple("${date:now:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}")) .setProperty(PROPERTY_CBS_NBI, constant(nbiSystemName)) .setProperty(PROPERTY_CBS_SBI, constant(defaultSbi)); // 遍历处理器名称列表,逐个添加process定义 for (String processorName : processorNames) { route = route.process(processorName); } // 最后追加后续路由节点 route.to("direct:" + reqSwitchRouteId ); }
方案说明
- 这个循环执行在路由初始化构建阶段,而非路由运行阶段,最终生成的路由和你手动逐行写
.process("处理器名")的效果完全一致,运行时会按照列表顺序依次执行处理器,没有额外的运行时开销。 - 请确保所有传入的处理器名称都已经提前注册到Camel上下文中,否则路由启动时会抛出找不到对应Bean的异常。
内容的提问来源于stack exchange,提问作者Rainer Bonn
相关产品推荐
相关产品推荐

