我是Spring Integration的新手,我试图使用Java DSL配置来指定一个使用具有@Aggregator的类GroupPublishAggregator的聚合消息的流,@ReleaseStrategy ,和@CorrelationStrategy注解。尝试通过@CorrelationStrategy注释使用bean时,出现“空关联不允许”
我怀疑我在配置中犯了一个新手错误,因为当聚合器收到消息时我看到的是“java.lang.IllegalStateException:不允许空关联,也许CorrelationStrategy失败?如果我调试框架代码,我发现AbstractCorrelatingMessageHandler正在调用默认的org.springframework.integration.aggregator.HeaderAttributeCorrelationStrategy而不是我的策略。
配置代码如下:
@Bean
public GroupPublishAggregator publishAggregator() {
// This class has methods with @Aggregator, @ReleaseStrategy,
// and @CorrelationStrategy annotations.
return new GroupPublishAggregator();
}
@Bean
public IntegrationFlow publish() {
return IntegrationFlows.from(this.inputChannel())
.wireTap("monitor")
.aggregate(new Consumer<AggregatorSpec>() {
@Override
public void accept(AggregatorSpec aggregatorSpec) {
aggregatorSpec.processor(publishAggregator(), null);
}
})
.get();
}
感谢您确认它应该工作。我通过回退到XML配置并指定策略引用和方法来解决此问题。 – nerff
我已经验证了您的解决方法的一个版本,现在可以在没有XML配置的情况下运行,谢谢。我的'@ Bean'方法创建一个'CorrelationStrategyFactoryBean',用我的策略调用'setTarget()'方法,调用'afterPropertiesSet()'方法强制默认策略被覆盖,并返回getObject的结果()'方法。 – nerff