Spring Aggregator Annotation没有expireGroupUponCompletion和persistenceStore作为输入

时间:2014-09-17 09:58:11

标签: spring spring-integration spring-annotations

我最近转向Spring启动并开始将所有XML转换为Java Configs。 @Aggregate注释没有expireGroupUponCompletion和persistenceStore作为输入。还有其他方法我们可以指定这些东西吗?

2 个答案:

答案 0 :(得分:1)

  

我们还有其他方法可以指定这些东西吗?

使用Spring Integration Java DSL

.aggregate(a -> a.expireGroupsUponCompletion(true)
                 .sendPartialResultOnExpiry(true)
                 .messageStore(messageStore(), null)

第二个null参数意味着我们对某些endpoint自定义不感兴趣,只是依赖于默认状态。我们保留了该语法以避免Lambda参数的显式类型:

.aggregate((AggregatorSpec a) -> a.expireGroupsUponCompletion(true)
                 .sendPartialResultOnExpiry(true)
                 .messageStore(messageStore())

答案 1 :(得分:1)

感谢Artem。我能够通过以下配置解决问题。

    @Bean
public IntegrationFlow pollingFlow() {
    return IntegrationFlows.from(splitSegment())
                           .aggregate( a -> a
                                     .expireGroupsUponCompletion(true)
                                     .messageStore(persistenceMessageStore())
                                     .sendPartialResultOnExpiry(true)
                                     .discardChannel(aggregateSegments())
                                     .correlationStrategy(m -> m.getPayload())
                                     .releaseStrategy(g ->  g.getMessages().size() > 5)
                                     .outputProcessor(g -> {
                                                               CountDB ag = new CountDB();
                                                               ag.setId((Long) g.getOne().getPayload());
                                                               ag.setActiveUsers((long)g.getMessages().size());
                                                               return ag;
                                                            })
                                    ,
                                     null)
                           .channel(aggregateSegments())
                           .get();