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();
}