我有一个负载均衡器代码,每隔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.
* */
}
然而,这是一个糟糕的解决方案,因为该程序只会停留在循环上,并将停止生成报告并发送它们。
我该如何解决这个问题?如何在生成请求并打印收到的报告时保持负载均衡器的运行?
答案 0 :(得分:1)
在camel-core中提供了一个名为Main的类来完成您正在寻找的内容。看一下这个网站:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html