Spring集成聚合不起作用

Spring集成聚合不起作用,spring,spring-integration,Spring,Spring Integration,这是我的代码: 当我进行聚合时,我的程序不会给出结果,也不会完成。是否需要创建自定义聚合逻辑?(如果需要,如何创建) 公共布尔接受(订单){ log.info(“订单过滤器:+订单”); if(order.getOrderState()==(OrderState.cancelled)){ log.info(“订单”+订单+“未通过筛选”); 返回false; } 日志信息(“订单”+订单+“通过过滤器”); 返回true; } @豆子 公共集成流get(){ 返回IntegrationFlows

这是我的代码: 当我进行聚合时,我的程序不会给出结果,也不会完成。是否需要创建自定义聚合逻辑?(如果需要,如何创建)

公共布尔接受(订单){
log.info(“订单过滤器:+订单”);
if(order.getOrderState()==(OrderState.cancelled)){
log.info(“订单”+订单+“未通过筛选”);
返回false;
}
日志信息(“订单”+订单+“通过过滤器”);
返回true;
}
@豆子
公共集成流get(){
返回IntegrationFlows.from(“输入”)
.transform(this::readFile).transform(this::getOrder)
.split().filter(this::accept).aggregate()
.get();
}

由于在标准
拆分()
聚合()
之间有一个
过滤器()
,因此这是一种预期行为。拆分器生成具有相关详细信息标题的消息:
序列
大小
。默认聚合器依赖于这些标题来确保组已完成,但由于筛选器中的
false
可能会遗漏一些拆分的项,因此默认聚合器无法将整个组构建到预期的
大小

这确实可以通过
groupTimeout()
之类的方法进行修复。因为我们无法预测有多少消息将通过过滤器,所以我们只能让它在超时后部分释放

查看文档中的更多信息:

另一方面,它看起来像是处理文件内容。可能
filespliter
可以满足您的要求。它有一个
markers
选项可发射,因此当
FileMarker.END
到达聚合器时,您可以确保释放组。请参阅文档中的更多内容:

            public boolean accept(Order order){
                log.info("Filter for order: "+order);
                if(order.getOrderState()==(OrderState.CANCELED)){
                    log.info("order " + order + " doesn`t pass filter");
                    return false;
                }
                log.info("order " + order + " pass filter");
                return true;
            }
        
            @Bean
            public IntegrationFlow get() {
                return IntegrationFlows.from("input")
                        .<File, List<String>>transform(this::readFile).<List<String>,List<Order>>transform(this::getOrder)
                        .split().filter(this::accept).aggregate()
                        .get();
            }