Apache的骆驼:GroupedExchangeAggregationStrategy组DefaultExchange代替消息主体

Apache的骆驼:GroupedExchangeAggregationStrategy组DefaultExchange代替消息主体

问题描述:

在继续给其他线程, Apache Camel : File to BeanIO and merge beanIO objects based on idApache的骆驼:GroupedExchangeAggregationStrategy组DefaultExchange代替消息主体

试图组使用GroupedExchangeAggregationStrategy的EmployeeDetails如下

from("seda:aggregate").aggregate(simple("${body.id}"), new 
MergeAggregationStrategy()).completionSize(3).log("Details - ${header.details}").to("seda:formList"); 

from("seda:formList").aggregate(new 
GroupedExchangeAggregationStrategy()).constant(true).completionTimeout(10) 
    .process(EmployeeDetailsBeanProcessor).log("Final list of groupedExchangeAggr ${body}") 
    .log("FILE PROCESSING COMPLETED"); 

EmployeeDetailsBeanProcessor:

public class EmployeeDetailsBeanProcessor implements Processor{ 
    public void process(Exchange exchange) throws Exception { 
     ArrayList<EmployeeDetails> rows = exchange.getIn().getBody(ArrayList.class); 
     for (EmployeeDetails record : rows)  { 
      System.out.println("----- Record:: ----- "+ 
       record.getId() + " "+ 
       record.getName() + " " + 
       record.getJob() +" "+ 
       record.getEmail() + " "+ 
       record.getCity()+" "+ 
       record.getCode()); 
     } 
    } 
} 

我的理解是当GroupExchangedAggregationStr使用ategy时,当前的Exchange将被添加到列表中,但是在测试时它会添加DefaultExchange而不是当前的Exchange和EmployeeDetails。

ERROR 4236 --- [eTimeoutChecker] o.a.camel.processor.DefaultErrorHandler : Failed delivery for (MessageId: ID-admin-PC-49678-1508604904882-0-30 on ExchangeId: ID-admin-PC-49678-1508604904882-0-29). Exhausted after delivery 
attempt: 1 caught: java.lang.ClassCastException: org.apache.camel.impl.DefaultExchange cannot be cast to com.test.EmployeeDetails 

你能给出一些关于分组交换的例子或说明吗?提前致谢。

不,你在EmployeeDetailsBeanProcessor错了。身体交换是列表而不是列表。

使用GroupedExchangeAggregationStrategy仅适用于特殊用途,并且可能使用了错误的策略。如果你想组合在一起作为List<EmployeeDetails>那么你可以使用FlexibleAggregationStrategy看这个单元测试的例子:https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/util/toolbox/FlexibleAggregationStrategiesTest.java