如何使用JavaDSL保持路由在camel上运行?

时间:2013-11-05 22:14:42

标签: java apache-camel load-balancing

我有一个负载均衡器代码,每隔10秒生成一个报告,并将其发送到localhost:9991上的MINA服务器或localhost上的MINA服务器:9992如果第一个失败。 一旦MINA服务器收到报告,他们就会更改报告并将其发送回负载均衡器,然后负载均衡器打印报告正文。

public class MyApp_A {

    public static void main(String... args) throws Exception {
        // create CamelContext
        CamelContext context = new DefaultCamelContext();


    ConnectionFactory connectionFactory = 
            new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
    context.addComponent("jms", jmsComponentClientAcknowledge(connectionFactory));

        context.addRoutes(
                new RouteBuilder(){

                    @Override
                    public void configure() throws Exception {
                        from("timer://org.apache.camel.example.loadbalancer?period=10s")
                        .beanRef("service.Generator", "createReport")
                        .to("direct:loadbalance");

                        from("direct:loadbalance")
                            .loadBalance().failover()
                                // will send to A first, and if fails then send to B afterwards
                                .to("mina:tcp://localhost:9991?sync=true")
                                .to("mina:tcp://localhost:9992?sync=true")
                            .log("${body}")
                        .end();
                    }
                }
                );

        context.start();
    }
}

然而,一旦我执行了loadbalancer,它就会立即完成。我尝试通过在context.start()调用后添加无限循环来解决此问题:

while(true){
    /* Dummy for loop, so our server does not die immediately after 
    * being born and can answer and send requests.
     * */
}

然而,这是一个糟糕的解决方案,因为该程序只会停留在循环上,并将停止生成报告并发送它们。

我该如何解决这个问题?如何在生成请求并打印收到的报告时保持负载均衡器的运行?

1 个答案:

答案 0 :(得分:1)

在camel-core中提供了一个名为Main的类来完成您正在寻找的内容。看一下这个网站:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html