2016-09-15 34 views
0

從我使用駱駝的spring引導中我想知道是否有可能在駱駝路由完成時獲得響應(最後一個路由在我的例子)。從java激活駱駝路由 - 如何獲得最後一條路由的響應

@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返回身體:它使用ProducerTemplate這樣開始了嗎?

回答

0

使用複合消息處理器EIP而不是split + aggregate。由於後者是兩個單獨的過程,其中聚合器的輸出不能作爲響應返回到分離器。前者可以通過在分離器中使用內置聚合策略來實現。

你可以找到例子,在駱駝EIP更多的細節 - 見分路器僅例如: http://camel.apache.org/composed-message-processor.html