3

ルートを開始し、タイマー/タイムアウト制御設定を適用したいと考えています。ルートがタイムアウト前に終了しない場合、例外がスローされる可能性があり、元のルート スレッド (パス) を停止する必要があります。私は NotifyBuilder、SEDA、タイマー + 盗聴、アグリゲーター、およびキャメル 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

If you want stop the route if the Route is not finished within specified time the I think using one more timer to check if the Route has finished its processing.(Look at the RoutePolicy) - if that helps you.

and use controbus stop/starting the route.

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();

there is catch here, it wont be stopped if its processing, hence you will have to remove the exchanges from InflightRepository..

Hope this helps.

于 2018-12-06T12:12:45.890 に答える