1

这是我正在尝试解决的用例 - 所以这是我之前的线程Apache camel 的扩展,用于聚合多个 REST 服务响应

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

现在对于一个用例,我希望将传入的 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&baz=c 传递给 service_2 端点。

现在,使用多播,同一组请求查询参数将同时传递给 service_1 和 service_2。即 service_1 和 service_2 都将收到 foo=a&bar=b&baz=c (整个查询参数)

我正在考虑的选项(高级别) -
打破传入的 url 参数并将它们作为标头粘贴,然后我可以有选择地使用这些标头为每个“to service_call”构建 CamelHttpQuery 标头

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

- 或者我应该退后一步,为这个特定的用例考虑完全不同的 EIP?

- 或者我在想一个错误的方向:)

感谢输入!谢谢!

4

1 回答 1

2

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

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

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

要计算其余服务的 2 个 uri,您可以使用 java bean 并执行方法调用表达式,然后只返回一个字符串,其中 2 个端点用逗号分隔(或字符串 [] 或列表等)

<recipientList strategyRef="myAggregationStrategy" parallelProcessing="true">
     <method ref="myBean" method="whereToSend"/>
</recipientList>
于 2012-06-21T07:22:09.007 回答