2016-12-19 20 views
0
from("direct:processRequest").multicast(aggregationStrategy).parallelProcessing(). 
       to("bean:abcService?method=getProductInfo", 
         "bean:xyzService?method=getProductInfo").end(). 
       to("bean:transformerBean"); 

とキャメルRECIPIENTLIST /マルチキャスト上記のルートは完璧に動作しますが、私は動的URL to(..)内部を使用します。その結果によって集約戦略


私を次のように私のルートを変更:

ルート:

from("direct:processRequest").multicast(aggregationStrategy).parallelProcessing(). 
    bean(RecipientListBean.class).end(). 
    to("bean:transformerBean"); 

RecipientListBean.java:

@Component 
public class RecipientListBean { 
    @RecipientList 
    public String[] route(@Header("countryCode") String countryCode) { 
     if (StringUtils.equalsIgnoreCase(countryCode, "IN")) { 
      return new String[]{"bean:xyzService?method=getProductInfo", 
        "bean:abcService?method=getProductInfo"}; 
     } else { 
      return new String[]{"bean:xyzService?method=getProductInfo"}; 
     } 
    } 
} 

ここでは動作しますが、アグリゲーションが機能していません

+1

動的URIにtoDを使用する –

+0

'toD'は複数のURIを取得しますか?私の場合、1つ以上のBeanコンポーネントを呼び出さなければなりません@ ClausIbsen –

+0

そのエンドポイントはありません。 –

答えて

1

multicast()がrecipientList()とやりとりする方法はわかりませんが、後者はマルチキャスト/集約の概念と並列処理をサポートしています。

ので、このようなものが動作するはずです:また

from("direct:processRequest") 
    .recipientList(header("myHeader")) 
    .aggregationStrategy(aggregationStrategy) 
    .parallelProcessing() 
    .to("bean:transformerBean"); 

、あなたはまた、並列処理とaggregationStrategyのパラメータをサポートしてい@RecipientList注釈を、使用することを好む場合。

+0

動的URIを 'header'に挿入する方法は? @Darius –

+0

ありがとうbru。働いた。 ( "受信者リスト")。recipientList(ヘッダー( "受信者")) .aggregationStrategy(aggregationStrategy) .parallelProcessing() .to ( "bean:transformerBean"); '' ' –

+0

でも、私はあなたが@RecipientListアノテーションを代わりに使用し続ける方がいいかもしれないと思ったので、それを示していませんでした。もしそうなら、あなたはそれにいくつかのパラメータを追加することができ、ヘッダの設定を避けることができます(同じ効果で、コードとはちょっと違う)。 –