如何在Camel Multicast中设置端点特定的标头值

时间:2012-06-15 21:30:44

标签: apache-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的浅层副本和所有多播接收者之间共享的引用类型。

但是我在这里寻找个人收件人的特定标题值。

怎么做?有什么指针吗?

2 个答案:

答案 0 :(得分: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,用于将标头添加到您的交换机。但是一个处理器将处理所有多播端点。

答案 1 :(得分:1)

有一个带有密钥Exchange.TO_ENDPOINT的标头,您可以看到响应来自哪两个端点。