Camel路由测试:批量删除指定起始点后的所有路由步骤
Apache Camel路由测试:批量移除wireTap后续步骤的简洁方案
方案一:通过weaveAfter按节点类型批量移除
利用Camel AdviceWith的weaveAfter方法,直接定位到WireTapDefinition类型的节点,一次性移除其后续所有步骤,无需逐个指定URI:
adviceWith(context, ROUTE_GENERAL_ID, builder -> { // 定位所有wireTap步骤之后的节点并批量删除 builder.weaveAfter(WireTapDefinition.class).remove(); });
这个方案的优势在于:不管主路由后续新增或删减多少步骤,测试代码都无需修改,完全适配路由结构变化。
方案二:主路由预留测试分支(无需修改测试代码)
在主路由中通过条件判断预留测试终止分支,生产环境走全流程,测试环境触发终止逻辑:
主路由定义:
from(source) .routeId(ROUTE_GENERAL_ID) .wireTap(inputMetrics) .choice() // 测试模式下直接终止路由 .when(exchangeProperty("testMode").isEqualTo(true)) .stop() .otherwise() .to(mappingStep) .process(enrichingWithInternalData) .process(enrichingWithExternalData) .end();
测试时只需设置testMode属性为true:
// 测试前设置交换属性 exchange.setProperty("testMode", true);
这种方式无需使用AdviceWith修改路由结构,对主路由侵入性低,适合长期维护的场景。
方案三:按索引范围批量移除(需注意节点顺序)
如果确定wireTap之后的节点位置固定,可以通过索引范围一次性移除:
adviceWith(context, ROUTE_GENERAL_ID, builder -> { // 移除从第1个节点(wireTap之后的第一个节点)到末尾的所有步骤 builder.weaveByIndex(1).toEnd().remove(); });
注意:该方案依赖路由节点的顺序,若主路由调整wireTap的位置,需要同步修改索引值,灵活性不如方案一。
内容的提问来源于stack exchange,提问作者MyWay
相关产品推荐
相关产品推荐

