2012-06-15 19 views
1

我想在多點傳送組件中設置端點專用標頭值。如何在Camel多點傳送中設置端點專用標頭值

XML如下DSL:

<route> 

<from uri="direct:testRoute"/> 
<multicast strategyRef="MyAggregator" parallelProcessing="true"> 
<to uri="direct:call1"/> <!-- set the header MY_HEADER = "call_1" --> 
<to uri="direct:call2/> <!-- set the header MY_HEADER = "call_2" --> 
</multicast> 

</route> 

基本上在我想知道的響應聚集,到服務請求響應這個屬於。

我試圖這樣做,但它不是正確的方法(解析異常):

<to uri="direct:call1"> 
     <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader> 
</to> 

我從閱讀的文件看到的是,多播將複製源Exchange和組播每個副本。所以它是Exchange的一個淺表副本和所有多播接收者之間共享的引用類型。

但我在這裏尋找個別收件人的特定標頭值。

如何做到這一點?任何指針?

回答

1

有一個包含鍵Exchange.TO_ENDPOINT的標題,您可以看到響應來自哪個端點。

+0

謝謝!我認爲這是我想要的。讓我開始做出改變! – Rishi

2

你不能在多播路由中做到這一點。但之後的直接路線應該很簡單。

<route> 
    <from uri="direct:call1"/> 
    <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader> 
    .. do whatever 
    </from> 
</route> 

否則,如果CALL1用於其他的東西,你可以不知道什麼時候這條路線把頭部一次,做一個簡單的預備路線:

<route> 
    <from uri="direct:prepCall1"/> 
    <setHeader headerName="MY_HEADER"><simple>call1</simple></setHeader> 
    <to uri="direct:call1"/> 
    </from> 
</route> 

作爲第三種選擇,甚至儘管不能將DSL(xml或java)放置在多播列表中,但您可以提供一個「onPrepareRef」處理器bean,它將標題添加到交換機中。但是一個處理器將處理所有多點傳送端點。

+0

感謝您的回覆。我想我需要更多地考慮我的方法,因爲我無法在多播列表中添加通話特定的標頭值。 – Rishi

相關問題