camel的路由规则加载默认使用xml或java方法来创建,但这2个方法不能够动态加载路由,查看camel的源码发现,可以通过路由规则字符串来动态的加载。
假设需要加载的路由如下
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="node-1">
<from uri="direct:node-1"/>
<bean method="preHandler" ref="bt"/>
<bean method="centerHandler" ref="bt"/>
<bean method="afterHandler" ref="bt"/>
<to uri="direct:node-2"></to>
</route>
</routes>
将上诉的路由信息转为字符串,然后通过下面的代码进行动态加载
InputStream is = new ByteArrayInputStream(routeXml.getBytes("UTF-8"));
RoutesDefinition xmlDefinition = camelContext.adapt(ModelCamelContext.class).loadRoutesDefinition(is);
camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(xmlDefinition.getRoutes());
上诉代码中,routeXml就是路由规则字符串,其中camelContext 为 CamelContext对象,spring注入即可