我编写了一个负载均衡器,它每 10 秒生成一个报告,并将其发送到 localhost:9991 上的 MINA 服务器,或者如果第一个失败,则发送到 localhost:9992 上的 MINA 服务器。一旦 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();
}
}
但是,一旦我执行负载均衡器,它就会立即完成。context.start()
我尝试通过在调用后添加无限循环来解决此问题:
while(true){
/* Dummy for loop, so our server does not die immediately after
* being born and can answer and send requests.
* */
}
然而,这是一个糟糕的解决方案,因为程序只会卡在循环中并停止生成报告和发送报告。
我该如何解决?如何在能够生成请求并打印它收到的报告的同时保持负载均衡器运行?