从java激活Camel路由 - 如何从最后一个路由获取响应

时间:2016-09-15 20:05:53

标签: spring-boot apache-camel

从我的春季启动使用驼峰我想知道是否有可能从骆驼路线完成后得到响应(我的例子中的最后一条路线)。它开始像这样使用ProducerTemplate:

@Component
public class CamelSender {

@Produce(uri = "direct:start")
private ProducerTemplate template;

public void callRoute(List<String> list) throws ExecutionException, InterruptedException {
    template.sendBodyAndHeader("direct:start", list, "orderId", "123456677"
    );
}
}

//驼峰路线

from("direct:start")
    .log("Split -> Process order ${body}")
    .split().body().to("direct:actionQueue") 
    .end();

 from("direct:actionQueue")
    .bean(ValidateOrders.class)
    .log("Sending to join queue")
    .to("direct:joinQueue");

 from("direct:joinQueue").aggregate(new MyOrderAggregationStrategy())
    .header("orderId")
    .completionTimeout(1000L)
    .process(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
                    List<String> orders =   (  (List<String>)  exchange.getIn().getBody());
                    String collect = orders.stream().map(order -> order.toString()).collect(Collectors.joining(","));
                    exchange.getIn().setBody( "Collected validations: "+collect);
                }
            })
            .log("${body}");

如何将收集的验证(字符串)返回到我的java bean?

1 个答案:

答案 0 :(得分:1)

使用复合消息处理器EIP而不是split + aggregate。因为后者是两个独立的过程,其中聚合器的输出不能作为响应发送回分离器。前者可以通过在拆分器中使用内置聚合策略来实现。

您可以在Camel EIP上找到示例和更多详细信息 - 请参阅仅限拆分器示例: http://camel.apache.org/composed-message-processor.html