Spring 集成 - 分散 - 聚集 - releaseExpression 中的动态值

Spring Integration - scatter-gather - dynamic value in releaseExpression

我在 Spring 集成流程中使用 scatter-gatter 并行调用 3 个服务:

                    .scatterGather(rlr -> rlr.applySequence(true)
                                             .recipientFlow(f1 -> f1
                                                    .channel(c -> c.executor(executorMLCalls))
                                                    .route(ifService1NeedsToBeCalled(), routeToService1OrBypassCall()))
                                             .recipientFlow(f2 -> f2
                                                    .channel(c -> c.executor(executorMLCalls))
                                                    .enrich(this::service2RequestEnricher)
                                                    .enrich(this::service2Enricher))
                                             .recipientFlow(f3 -> f3
                                                    .channel(c -> c.executor(executorMLCalls))
                                                    .enrich(this::service3RequestEnricher)
                                                    .enrich(this::service3Enricher)),
                                   agg -> agg.correlationStrategy(msg -> msg.getHeaders().get("corrMLCalls"))
                                             .releaseExpression("size() == 3"),
                                   sgs -> sgs.gatherTimeout(gatherTimeout)
                                             .requiresReply(true)
                    )

所以必须始终调用 service2service3 但调用 service1 取决于在条件下。
因此我不能使用 size() == 3 释放表达式,因为有时它应该是 size() == 2.

如何在表达式中使用动态值?我可以在发布表达式中调用本地方法吗?

谢谢!

此致,
五、

是的,这样的表达式是 BeanFactory 感知的,您可以使用 @ 语法访问应用程序上下文中的任何 bean。

另一方面有一个:

/**
 * @param releaseStrategy the release strategy.
 * @return the handler spec.
 * @see AbstractCorrelatingMessageHandler#setReleaseStrategy(ReleaseStrategy)
 */
public S releaseStrategy(ReleaseStrategy releaseStrategy) {

这可能会根据您的环境和MessageGroup作为发布候选者做出任何决定。