3

我想开始一条路线并应用计时器/超时控制设置。如果在超时之前路由没有完成,可能会抛出异常,并且必须停止原始路由线程(路径)。我看过 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”的原始线程?

4

1 回答 1

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 中删除交换。

希望这可以帮助。

于 2018-12-06T12:12:45.890 回答