我有一个Camel应用程序,我正在尝试根据不同响应(REST Web服务)的一些输出进行一些聚合。
这是我到目前为止(Camel路线):
@Component
public final class AggregationRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
rest("/aggregation")
.get()
.to("direct:retrieve");
from("direct:retrieve")
.multicast(/*new BodyAggregationStrategy(), true*/)
.to("direct:foo")
.to("direct:foo1");
from("direct:foo")
.to("seda:http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?sector=conus")
.to("direct:aggregate");
from("direct:foo1")
.to("seda:http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?sector=conus")
.to("direct:aggregate");
from("direct:aggregate")
.aggregate(header("id"), new BodyAggregationStrategy())
.log(LoggingLevel.WARN, simple("${body}").getText());
}
}
......“聚合策略”
public final class BodyAggregationStrategy implements AggregationStrategy {
@Override
public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) {
if (null == oldExchange) {
return newExchange;
}
String oldBody = oldExchange.getIn().getBody(String.class);
String newBody = newExchange.getIn().getBody(String.class);
oldExchange.getIn().setBody(oldBody + "+" + newBody);
return oldExchange;
}
}
...最终,Web服务将会有所不同,但我现在正试着看看我是否可以先解决这个基本问题。
我定义了一个REST端点,当GET /aggregation
命中时(在我的身边),我想咨询两个或更多REST Web服务并汇总这些响应;然后“回答”。
任何线索?
答案 0 :(得分:3)
组播EIP具有内置聚合器,因此在此模式上配置聚合策略,而不是使用单独的聚合器。这可以确保消息被变换并作为同一工作单元的一部分进行聚合,结果可以显示并发送回调用REST客户端。