2012-06-15 18 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

相关问题