2014-01-30 58 views
0

我有,我想駱駝訪問以下豆路線:正確使用駱駝聚合「到」的URI

  1. 首先,loggingBean
  2. 其次,aggregator是等待一定數量的消息一旦達到聚集的completionSize它聚集
  3. (3),繼續前進到#4
  4. 三,processorBean
  5. 而第四/最後,finalizerBean

這裏是我的路線:

<route id="my-camel-route"> 
    <from uri="direct:starter" /> 

    <to uri="bean:loggingBean?method=shutdown" /> 

    <aggregate strategyRef="myAggregationStrategy" completionSize="3"> 
     <correlationExpression> 
      <simple>${header.id} == 1</simple> 
     </correlationExpression> 
     <to uri="bean:processorBean?method=process" /> 
    </aggregate> 

    <to uri="bean:finalizerBean?method=shutdown" /> 
</route> 

我的問題:我需要把finalizerBean<aggregate>元素,像這樣:

<aggregate strategyRef="myAggregationStrategy" completionSize="3"> 
    <correlationExpression> 
     <simple>${header.id} == 1</simple> 
    </correlationExpression> 
    <to uri="bean:processorBean?method=process" /> 
    <to uri="bean:finalizerBean?method=shutdown" /> 
</aggregate> 

基本上,我想知道如果我現在擁有的東西的方式會提示Camel發送消息給聚合器,然後發送它到finalizerBean(實質上繞過聚合器)。在我的情況下,我希望它彙總,直到completionSize是3,然後然後發送彙總交換到processorBean,然後最後finalizerBean

還是我配置正確? finalizerBean<aggregate>之間有什麼區別?

回答

1

第二個例子是正確的。

<aggregate strategyRef="myAggregationStrategy" completionSize="3"> 
    <correlationExpression> 
     <simple>${header.id} == 1</simple> 
    </correlationExpression> 
    <to uri="bean:processorBean?method=process" /> 
    <to uri="bean:finalizerBean?method=shutdown" /> 
</aggregate> 

如果finalizerBean是「外部」 <aggregate>,它會得到每一個來自direct:starter消息執行 - 這是不是你想要的東西;)

+0

我們如何使用表達同樣的事情Java DSL? 'aggregate()。to()'做我期望的事情,即只發送一次聚合交換到指定的路由嗎? –

+0

正確的,像aggregate(new MyStrategy())。completionSize(3).to(「bean:xyz」)'是等價的。 – vikingsteve

+0

文檔:http://camel.apache.org/aggregator2.html – vikingsteve