1

我想在多播组件中设置端点特定的标头值。

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 的浅表副本,也是所有多播接收者之间共享的一种引用。

但是在这里,我正在寻找单个收件人的特定标头值。

这该怎么做?任何指针?

4

2 回答 2

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,将标头添加到您的交换中。但是一个处理器将处理所有多播端点。

于 2012-06-15T22:00:57.620 回答
1

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

于 2012-06-16T13:41:27.903 回答