我想开始路线并应用定时器/超时控制设置。如果路由在超时之前没有完成,则可能抛出异常,并且必须停止原始路由线程(路径)。我看过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"的原始主题?
答案 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中删除交换。
希望这会有所帮助。