对Camel路由应用超时控制

时间:2012-10-27 00:30:26

标签: apache-camel

我想开始路线并应用定时器/超时控制设置。如果路由在超时之前没有完成,则可能抛出异常,并且必须停止原始路由线程(路径)。我看过NotifyBuilder,SEDA,Timer +窃听,聚合器和Camel BAM。它们似乎都没有内置功能来停止原始路由线程。你有什么建议吗?谢谢

这是我正在考虑的代码框架:

OnException(Exception.class)  
.handled(true)  
.to(dead_uri).end()// handle timeout exception and quite the current route thread  

from(uri)  
  //start timer or set timeout something  
  .to(process_uri);  

我知道Camel JMS有超时控制权限,但我不想仅仅因为我的路由超时而需要使用JMS。 SEDA具有超时控制权,但SEDA超时将在不同的线程中。如何停止" process_uri"的原始主题?

1 个答案:

答案 0 :(得分:0)

如果您要在指定时间内未完成路由的情况下停止该路由,我想再使用一个计时器来检查该路由是否已完成处理。(请查看RoutePolicy)-是否有帮助。

并使用controbus停止/启动路线。

from("timer://checkIfProcessed?repeatCount=1")
    .process(new Processor(){
void process(Exchange exc){
// check the status of the route and send a signal using controlbus , u could use if(status?)
producerTempalte.asyncSend("controlbus:route?routeId="+"theRouteYouWantToStop"+"&action=stop", exchange);
}
}
).end();

这里有问题,如果进行处理就不会停止,因此您必须从InflightRepository中删除交换。

希望这会有所帮助。