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)
)
所以必须始终调用 service2 和 service3 但调用 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
作为发布候选者做出任何决定。
我在 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)
)
所以必须始终调用 service2 和 service3 但调用 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
作为发布候选者做出任何决定。