2017-04-24 7 views
0

私たちはApache Camel統合プラットフォームを使用しており、いくつかのデータをレシートで更新しています。更新が完了するまでに数時間かかるため、このアップデートのステータスを知りたいと考えています。私たちが持っている問題は、プログラムが終了するまで、プログラムから応答が得られないということです。キャリアタイプはrestletタイプなので、ブラウザが終了するのを待っているので、ジョブが終了するまで待たなければなりません。非同期的な方法を検討しましたが、非同期はrestletデータキャリアによってサポートされていないようです。Apache CamelのRestlet完了までブラウザをロックしない

私たちはスレッドプールを使用してジョブを実行することを検討しましたが、後でもっと広範囲に使用してジョブを実行する可能性があるため、非同期ジョブを実行する別の方法であるかどうかを知りたいスレッドを毎回実行することなくasyncを実行することをお勧めします。

例コード:それが応答する前に、ブラウザ上のコードからよう

from("restlet:" +BASE_URL + "test1?restletMethods=get"). 
    routeId("Test 1"). 
    log(LoggingLevel.INFO, log.getName(), "Test 1 Started"). 
    delay(10000). 
    log(LoggingLevel.INFO, log.getName(), "Test 1 Complete"). 
    to("mock:update"); 

は10秒を待ちます。この期間にブラウザをすぐに利用できるようにし、データを取得したいと考えています。

+0

わかりません。ルートに遅延を追加するコードがありますが、ルートをすぐに利用できるようにしたいのですか? –

+0

これは、いくつかのジョブが実行されているシミュレーションです、そして、ジョブが実行されているとき、私は実行中にそのジョブのステータスを取得したいと思います。今はもっと大きなプロジェクトに入っているので、仕事が終わるまでデータを取得することはできません。私たちは、キャメルがレセレットを待ち行列に入れ、順番に実行することに気付きました。 – Tor

+0

そのバックエンドサービスのモックを作成してから遅延を追加する方が良いでしょうか?あなたは単にあなたが望むメッセージを返すだけで、何らかのルートへのsedaキューを作成することができます。 Sedaは非同期で動作し、GET後にブラウザに制御を戻すはずです。 –

答えて

0

「to」メソッドでは、waitForTaskToComplete = Neverというオプションを指定してSEDAを使用して動作させることができます。

from("restlet:"+BASE_URL+"seda?restletMethods=get"). 
routeId("SEDA async sender"). 
log(LoggingLevel.INFO, log.getName(), "SEDA test started"). 
log(LoggingLevel.INFO, log.getName(), "Transfer to SEDA..."). 
to("seda:test1?waitForTaskToComplete=Never"); 

from("seda:test1"). 
threads(4). 
routeId("SEDA async receiver"). 
log(LoggingLevel.INFO, log.getName(), "SEDA active"). 
delay(4000). 
log(LoggingLevel.INFO, log.getName(), "SEDA test complete"); 
//to("mock:update"); 
関連する問題