2016-05-12 2 views
0

私のコードは、jmsキューを消費し、lbは外部httpクライアントにリダイレクトします。 ローカルディレクトリへの配信が失敗するたびに、元のメッセージを記録する必要があります。 問題は、各フェイルオーバーによってonExceptionがキャッチされることです。 これを達成する方法はありますか?ロードバランサから例外を1回だけ処理します(フェイルオーバーが使い果たされたとき)

擬似コード:

onException(Exception.class).useOriginalMessage() 
    .setHeader(...) 
    .to("file...") 
    .setHeader(...) 
    .to("file...") 

from("activemq...") 
    .process(...) 
    .loadBalance().failover(...) 
     .to("lb-route1") 
     .to("lb-route2") 
    .end() 
    .process() 
    .to("file...") 

from("lb-route1") 
    .recipientList("dynamic url") 
.end() 

from("lb-route2") 
    .recipientList("dynamic url") 
.end() 
+0

circuitBreakerコンポーネントをerrorHandlerと共に使用してこれを実行し、リトライを1に制限することができます – Sundar

答えて

0

私は文に複数でこのロジックをテストしていませんが、私は、このロジック機能だけで罰金、アレイ内のエンドポイントの私のリストを持っている場合。これを第2のエンドポイントに配信しようとしない場合、第1のエンドポイントに配信しようとします。 2番目のエンドポイントで例外が発生すると、ルートのエラーハンドラに伝播します。代わりにラウンドロビンを使用する必要がある場合は、failoverステートメントの最後のfalseをtrueに変更します。

String[] endpointList = {"direct:end1", "direct:end2"}; 

from("direct:start") 
    .loadbalance().failover(endpointList.length-1, false, false) 
    .to(endpointList); 
関連する問題