以下是我尝试在Camel中设置的流程:
GET / product / foo - > MULTICAST [HTTP URI 1,HTTP URI 2,HTTP URI 3] - > AGGREGATE - >将聚合值返回给HTTP响应正文
我用这种方式设置了路由,但是在原始GET的响应中我没有得到任何数据 .
如何获取聚合器返回的值?
@Override
public void configure() throws Exception {
restConfiguration()
.host("localhost")
.port("8081")
.component("jetty");
from("rest:get:product/foo")
.multicast()
.parallelProcessing()
.aggregationStrategy(new ProductPriceAggregator())
.to("direct:prodcutService1")
.to("direct:prodcutService2")
.to("direct:prodcutService3");
from("direct:prodcutService1")
.to("http4:localhost:9090/simple/product/foo?bridgeEndpoint=true")
.to("direct:aggregate");
from("direct:prodcutService2")
.to("http4:localhost:9091/simple/product/foo?bridgeEndpoint=true")
.to("direct:aggregate");
from("direct:prodcutService3")
.to("http4:localhost:9092/simple/product/foo?bridgeEndpoint=true")
.to("direct:aggregate");
from("direct:aggregate")
.log("${body}").;
}
}
这是我的聚合器:
public class ProductPriceAggregator implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
System.out.println("FOO BAR");
double oldPrice = oldExchange.getIn().getBody(Double.class);
double newPrice = newExchange.getIn().getBody(Double.class);
double finalPrice = oldPrice > newPrice ? newPrice : oldPrice;
oldExchange.getIn().setBody(finalPrice);
return oldExchange;
}
}
1 回答
这样做 .
但是聚合策略存在一个小错误 . 在这里重写了它 .
对于第一次迭代,
oldExchange
将为null,因此您需要检查并返回newExchange
.EDIT:
出于一些奇怪的原因(或者可能是这样设计),Camel正在将Double值视为完全不同 . 要使其工作,请执行以下更改 .
这是因为,默认情况下它将text / html作为Accept类型,而double值就像
<Double>2.345<Double>
之类的html标签 . 因此,您需要将类型指定为application / json以便更好地处理 .在Aggregator代码中,您需要这样做 .