Camel提供了两种定义路由的形式,
一种是JAVADSL我们定义一个RoutBuilder 在config里面定义form("bean:a").to("bean:b")
还有一种是SPringDSL 通过XML的形式来配置.
如果我们需要在应用启动后来动态的增加或者修改路由该怎么办呢.
可以通过与beanShell的配合达到上述目的,
首先定义好一个RouteDefinition对象rd,放入beanShell的执行器Interpreter中,
写好路由定义脚本采用javaDSL : rd.from("bean:a).to("bean:ss")
执行脚本,然后camel容器再加载rd即可.
代码如下:
1
2
3
4
5
6
7
8
|
String script ="rd.from(\"bean:a\").to(\"bean:b\")";
Interpreter scriptInterpreter =newInterpreter();
scriptInterpreter.set("rd", rd);
scriptInterpreter.eval(script);
scriptInterpreter.eval(script);
rd.setId("RD1001");//给路由设置ID
rd.markPrepared();
camelContext.startRoute(rd);
|
当然在脚本定义路由时不能直接用camel提供的一些表达式,如bean(),simple()等.需要写成rd.from("bean:b").rd.bean("c")
如果觉得这样不简洁的话,还可以采用自定义Component的形式来解决这个问题.