Camel路由初步配置

Camel路由初步配置
将Camel路由使用Beanshell来执行,以一种更动态的形式构造路由 。
进而,可以编写一个动态配置路由。
首先下载 Beanshell的java包:bsh-2.0b4.jar,然后把它引进到我们的工程里。
新建一个route.bsh文件,文件的内容主要是用来保存路由配置语句的java代码。首先我们写一个简单的路由配置。
route.bsh脚本内容如下,到文件:
class JmsToFileRoute extends org.apache.camel.builder.RouteBuilder {
    public void configure() {
    from("test-jms:TOOL.DEFAULT").to("file://test");
       }
}
context.addRoutes(new JmsToFileRoute());

route.bsh脚本内容如下,分支路由:
class JmsToFileRoute extends org.apache.camel.builder.RouteBuilder {
    public void configure() {
    from(start).choice()
                           .when(header("foo").isEqualTo("bar")).to(one)
                           .when(header("foo").isEqualTo("cheese")).to(two)
                            .otherwise().to(three) ;
      
}
}
context.addRoutes(new JmsToFileRoute());
然后我们利用Beanshell来解释(红色标记部分):
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("name","password","tcp://192.168.11.104:61615");
context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
Interpreter interpreter = new Interpreter();
interpreter.set("context", context); 
//设置参数 ,分支路由中需要
interpreter.set("start", "test-jms:TOOL.DEFAULT");
interpreter.set("one", "test-jms:a");
interpreter.set("two", "test-jms:b");
interpreter.set("three", "test-jms:c");
interpreter.source ("D:\\route.bsh"); 





下面是增加路由接口和路由的语法检测接口:
public class CamelRouter {
public void excuteRouter(CamelContext context, String router) {
Interpreter interpreter = new Interpreter();
String router_s = "class JmsRoute extends org.apache.camel.builder.RouteBuilder {\n"
+ "    public void configure() {";

String router_e = ";\n" + "\n" + "}\n" + "}\n"
+ " context.addRoutes(new JmsRoute());";

String router_ = router_s + router + router_e;

try {
interpreter.set("context", context);
interpreter.eval(router_);
} catch (EvalError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static boolean checkRouter(String router) {
Interpreter interpreter = new Interpreter();
String router_s = "class JmsRoute extends org.apache.camel.builder.RouteBuilder {\n"
+ "    public void configure() {";

String router_e = ";\n" + "\n" + "}\n" + "}\n"
+ " new JmsRoute().configure();";

String router_ = router_s + router + router_e;

try {
interpreter.eval(router_);
return true;
} catch (EvalError e) {
// e.printStackTrace();
return false;
}
}

public static void main(String[] args){
StringBuffer sb = new StringBuffer();
sb.append("from(\"activemq:a\").choice().when(header(\"foo\").isEqualTo(\"bar\"))")
.append(".to(\"activemq:b\").when(header(\"foo\").")
.append("isEqualTo(\"cheese\")).to(\"activemq:c\").otherwise().to(\"activemq:d\")");
boolean state = CamelRouter.checkRouter(sb.toString());
System.out.println("state = " + state);
}
}

你可能感兴趣的:(apache,c,activemq,脚本,jms)