是否可以将不同的url参数传递给Camel Multicast EIP中的各个端点?

时间:2012-06-21 00:27:48

标签: rest apache-camel

以下是我尝试解决的用例 - 所以这是我之前的帖子的扩展,Apache camel to aggregate multiple REST service responses

我使用了具有自定义聚合策略的多播组件来将传入请求分叉到子请求并聚合它们的响应。一切正常,直到这个。

现在,对于其中一个用例,我希望传入的URL参数有选择地传递给某些子服务。例如:

来电请求 - http://[host]/my-service/scan?foo=a&bar=b&baz=c

我的多播组件看起来像这样 -

<multicast strategyRef="myAggregationStrategy" parallelProcessing="true">
     <to REST_service_1"/>
     <to REST_service_2"/>
</multicast>

我想只将foo = a传递给service_1端点,将bar = b&amp; baz = c传递给service_2端点。

现在,通过Multicast,同一组请求查询参数将传递给service_1和service_2。即service_1和service_2都会收到foo = a&amp; bar = b&amp; baz = c(整个查询参数)

选项我思考(在高层次上) -
- 打破传入的url参数并将它们作为标题粘贴然后我可以有选择地使用这些标题为每个人“to service_call”构建CamelHttpQuery标题

- 但最后,Exchange将在所有多播端点之间共享,因此这种方法是否可行?

- 我是否应该退一步思考这个特定用例的不同EIP?

- 或者我在思考方向错误:)

欣赏输入!谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用收件人列表EIP,然后您可以使用2个不同的uris来调用REST服务,但发送与多播相同的消息。

收件人列表还支持并行和聚合。

http://camel.apache.org/recipient-list.html

要为其余服务计算2 uris,您可以使用java bean并执行方法调用expresison,并返回一个字符串,其中2个端点用逗号(或String []或List等)分隔。)

<recipientList strategyRef="myAggregationStrategy" parallelProcessing="true">
     <method ref="myBean" method="whereToSend"/>
</recipientList>