使用REST路由进行Camel聚合

时间:2016-06-28 14:54:55

标签: java rest apache-camel integration

我有一个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服务并汇总这些响应;然后“回答”。

任何线索?

1 个答案:

答案 0 :(得分:3)

组播EIP具有内置聚合器,因此在此模式上配置聚合策略,而不是使用单独的聚合器。这可以确保消息被变换并作为同一工作单元的一部分进行聚合,结果可以显示并发送回调用REST客户端。