2013-09-30 59 views
6

1ST問題:駱駝 - 內容富集器:豐富()VS pollEnrich()

我不能真正理解enrich()pollEnrich()之間的差異。也許駱駝使用的術語不太好。

我讀到這裏:使用充實DSL元素

駱駝自帶的內容富集的兩種口味的DSL http://camel.apache.org/content-enricher.html

內容豐富

  • 豐富
  • pollEnrich

富集使用生產者獲取附加數據。通常使用 來請求回覆消息,例如調用外部的 Web服務。 pollEnrich另一方面使用輪詢消費者 獲取附加數據。它通常用於事件消息 消息傳遞,例如讀取文件或下載FTP文件。

我不明白有什麼區別。他們似乎都通過消費獲得額外的數據(Web服務響應,FTP文件)。那麼爲什麼他們說Web服務響應是由「製作者」完成的呢?

第二個問題:

在 「駱駝在行動」 的書頁。 72他們說:

豐富和pollEnrich不能在目前的匯率

既不豐富也不pollEnrich可以利用從當前匯率的任何信息 訪問信息。這意味着,例如,您不能在的交換機上存儲文件名頭,以便pollEnrich使用 選擇一個特定的文件。如果Camel 團隊可以找到解決方案,這可能會在未來發生變化。

但是他們給類似如下的代碼示例,用於實現聚合策略:

public class ExampleAggregationStrategy implements AggregationStrategy { 

    public Exchange aggregate(Exchange original, Exchange resource) { 
     Object originalBody = original.getIn().getBody(); 
     Object resourceResponse = resource.getIn().getBody(); 
     Object mergeResult = ... // combine original body and resource response 
     if (original.getPattern().isOutCapable()) { 
      original.getOut().setBody(mergeResult); 
     } else { 
      original.getIn().setBody(mergeResult); 
     } 
     return original; 
    } 

} 

在這個例子中,我看到他們有機會獲得Exchange original,這不正是「當前匯率「?如果不是,那麼「原始交換」代表什麼交換? 他們是什麼意思的「當前交流」?

回答

12

這裏的區別是:

  • enrich假設你想使用傳入Exchange作爲參數傳遞給了其他的服務請求。例如,您的傳入Exchange可能是一個用戶ID,但您確實需要整個用戶對象,因此您可以通過將用戶ID傳遞給REST服務,該服務返回成爲Exchange的用戶對象等。

  • pollEnrich假定傳入的Exchange是一個簡單的觸發器,它告訴PollingConsumer查找數據並創建Exchange(忽略傳入Exchange的內容)。例如,您可能有一個計時器或其他業務流程事件,需要拿起一個文件進行處理等等,也就是說,傳入的Exchange數據不用於動態配置PollingConsumer ...只有URI用於此目的。

也就是說,駱駝2.12,有指定的聚合策略爲pollEnrich的例子有聚集傳入/返回交流結合起來,既enrichpollEnrich

this unit test選項策略