我创建了一个流程,该流程按状态轮询数据库中的行,对其进行验证,然后将其汇总到集合中。处理完整个流程后,每行都将设置为适当的状态。但是,当我将聚合器与发布策略TimeoutCountSequenceSizeReleaseStrategy
一起使用时,经过的时间非常短,则不会发生发布组。之后,下面的轮询将在另一个线程中进行,但是直到消息数量不会达到策略中的目标(阈值)时,之前的消息组才被处理。
我的流程代码:
@Bean
public IntegrationFlow testFlow(EntityService entityService,
EntityValidator entityValidator,
EntityFlowProperties properties,
EntityChecker checker) {
return IntegrationFlows
.from(getMessageSource(entityService::getByStatus, properties.getMaxRowsPerPoll()),
e -> e.poller(getPollerSpec(properties)))
.split()
.transform(entityValidator::validate)
.filter(ValidationStatus<Entity>::isValid, filter ->
filter.discardFlow(flow -> flow.handle(entityService::handleValidationErrors)))
.transform(ValidationStatus<Entity>::getEntity)
.aggregate(aggregatorSpec -> aggregatorSpec.releaseStrategy(new TimeoutCountSequenceSizeReleaseStrategy(5, 10000)))
.transform(checker::checkOnSomething)
.split()
.transform(CheckResultAware<Entity>::getEntity)
.handle(entityService::saveAndChangeStatus)
.get();
我希望在与轮询相同的线程上执行聚合,并且在当前流程结束之前不要进行新的轮询。
在轮询和聚合之间更改状态的方法不合适。
有没有办法做到这一点?
答案 0 :(得分:0)
您为什么需要TimeoutCountSequenceSizeReleaseStrategy
;您的序列是有限的;只需使用默认的SimpleSequenceSizeReleaseStrategy
。
无论如何,TimeoutCountSequenceSizeReleaseStrategy
应该根据序列大小释放。
但是,它实际上并不适合您的用例,因为您可以在商店中留出部分分组。