我想在多播组件中设置端点特定的标头值。
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的浅层副本和所有多播接收者之间共享的引用类型。
但是我在这里寻找个人收件人的特定标题值。
怎么做?有什么指针吗?
答案 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的标头,您可以看到响应来自哪两个端点。