Spring 集成 DSL Scatter-Gatherer:为什么 applySequence(true) 不是默认值?

Spring Integration DSL Scatter-Gatherer: Why isn't applySequence(true) the default?

我看到的所有 Spring Integration DSL Scatter-Gatherer 的例子都在分散器上明确设置了 .applySequence(true)

例如像这样:

@Bean
public IntegrationFlow helloFlow() {
    return IntegrationFlows
            .from(Http.inboundChannelAdapter("hello").get())
            .scatterGather(s -> s
                    .applySequence(true)
                    .recipientFlow(f -> f.handle((m, h) -> 33))
                    .recipientFlow(f -> f.handle((m, h) -> 444))
            )
            .split()
            .log()
            .get();
}

如果我省略 .applySequence(true) 我得到

java.lang.IllegalStateException: Null correlation not allowed.  Maybe the CorrelationStrategy is failing?

为什么在这种情况下需要序列? 如果在很多情况下都需要它,为什么 .applySequence(true) 不是默认设置,如果出于某种原因需要,可以选择将其显式设置为 false ?您什么时候明确希望将其设置为 false?

此组件的分散器部分完全基于收件人列表路由器,默认情况下该选项 false 随附。因此,为了一致性和运行时优化,我们在 scatter-gather 中也将其保持为 false:https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#router-implementations-recipientlistrouter。在现实世界中,当收集到的消息返回那些生成的序列细节时,它确实是后置情况 headers。通常,收集器配置为自定义关联和发布策略。老实说,它是 applySequence 更多的演示和示例功能。另外,不要忘记消息不变性,我们可以选择强制框架创建新消息以添加序列详细信息 headers。