有没有办法模仿骆驼路线的一部分?
我建立了这样一条路线:
from("a").b().signReq().send().validateAns().c().to("d");
但是当我运行测试时,我不想在路由中添加 signReq()。send()。validateAns()。有什么建议吗?
另外,也许有办法将这部分路由封装到方法中?它会很棒,因为我有很多路线和许多相同的交互部分。如果可以在没有运行时选择/交换机的情况下完成,那是最好的,因为我知道配置阶段的所有条件。
答案 0 :(得分:0)
为了测试现有路线,您可以使用AdviceWith并在测试之前建议路线。
我建议使用 weaveById ,这是替换部分路线的最精确方式。
例如,在以下路线中
from("direct:start")
.to("mock:foo")
.to("mock:bar").id("bar")
.to("mock:result");
将“mock:bar”的id设置为“bar”后,您可以在测试中使用
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
// weave the node in the route which has id = bar
// and replace it with the following route path
weaveById("bar").replace().multicast().to("mock:a").to("mock:b");
}
});
在您的示例中,您可以执行以下操作:
from("a").b().to("direct:replace").id("replace").c().to("d");
from("direct:replace").signReq().send().validateAns();
然后使用以下方法建议路线:
weaveById("replace").remove();
当然,有更多方法可以实现此功能。对于所有选项和完整示例,请转到http://camel.apache.org/advicewith.html
提示:特别注意启动上下文的示例中的代码部分!
// we must manually start when we are done with all the advice with
context.start();