如何在Apache Camel中添加带条件的后置处理拦截器?
实现方案
场景1:仅原端点调用成功后,条件触发后置逻辑
你原写法错误是因为afterUrl是拦截器全局配置,不能嵌套在choice分支内单独生效,直接在调用完原端点后手动加条件判断即可满足需求:
interceptSendToEndpoint(ENDPOINT_1) .skipSendToOriginalEndpoint() // 所有场景都先执行原端点调用 .to(ENDPOINT_1) // 调用完成后判断是否需要执行后置逻辑 .choice() .when(conditionIsMet) .to(AFTER_ENDPOINT_1) .endChoice();
场景2:无论原端点调用成功/失败,都条件触发后置逻辑
如果你的后置逻辑是日志、埋点这类需要覆盖异常场景的需求,可以用onCompletion配合条件判断实现:
interceptSendToEndpoint(ENDPOINT_1) .skipSendToOriginalEndpoint() // 定义请求完成后的回调逻辑,仅满足条件时触发 .onCompletion() .onWhen(conditionIsMet) .to(AFTER_ENDPOINT_1) .end() // 执行原端点调用 .to(ENDPOINT_1);
原写法错误原因
afterUrl是interceptSendToEndpoint的全局属性,一旦配置,只要该拦截器触发,就会在整个拦截逻辑执行完成后调用指定端点,无法做分支级别的条件控制,因此不适合你的需求场景。
内容的提问来源于stack exchange,提问作者Pasha
相关产品推荐
相关产品推荐

