Spring 集成 - DSL - 拆分或分叉
Spring Integration - DSL - Split or Fork
我想为以下流程创建 IntegrationFlow 流程。
- 从开始到交付是同步流程。
- 如何从构建项和验证项中提取/分叉异步结束节点。
@Bean
public IntegrationFlow buildCart() {
return f -> f.handle(validate, "buildPreCheck")
.handle(preProcessProcessor)
.handle(getOffersProcessor)
.handle(buildItems)
**.wireTap(log())**
.handle(validateItems)
.handle(deliver);
}
编辑:
您好 Artem,我在下面的代码中添加了 Wire Tap。仍然将 WireTap 节点作为 Sequencal 执行并等待该节点。
请帮助使其成为Aysnc节点。
@Bean
public IntegrationFlow log() {
return f -> f.handle(auditProcessor).channel("nullChannel");
}
@ServiceActivator
@Description("Call and get the Offers Request")
public void getDetails(Message<Context> message) throws InterruptedException {
log.info("getDetails-Sleep-Start");
Thread.sleep(3000);
log.info("getDetails-Sleep-End");
}
对于 Spring 集成 Java DSL,我们都缺少 Spring 集成中非常重要的组件之一是 MessageChannel
。事实上,只要我们需要超过默认值 DirectChannel
,就可以将通道添加到流中。对于异步执行,我们有一个 ExecutorChannel
。但是在我们开始分叉流程之前,我们需要以某种方式跳到那里而不破坏主要流程。就 EIP 而言,这称为 Wire-Tap:https://www.enterpriseintegrationpatterns.com/patterns/messaging/WireTap.html.
Spring 集成 Java DSL 建议在流程中采用类似 .wireTap()
运算符的实现。审计逻辑可以在 tapped 子流或通道中实现,但不要忘记 ExecutorChannel
!
您可以在参考手册中查看更多信息:https://docs.spring.io/spring-integration/reference/html/java-dsl.html#java-dsl-wiretap
更新
.handle(buildItems)
.wireTap(log())
是正确的方法:您将审核 buildItems
的结果并继续下一步。
log()
必须这样修改:
@Bean
public IntegrationFlow log() {
return f -> f.channel(c -> c.executor(taskExecutorBean())).handle(auditProcessor).channel("nullChannel");
}
关注c.executor()
。通过这种方式,我们为 log()
子流程添加了异步切换。
我想为以下流程创建 IntegrationFlow 流程。
- 从开始到交付是同步流程。
- 如何从构建项和验证项中提取/分叉异步结束节点。
@Bean
public IntegrationFlow buildCart() {
return f -> f.handle(validate, "buildPreCheck")
.handle(preProcessProcessor)
.handle(getOffersProcessor)
.handle(buildItems)
**.wireTap(log())**
.handle(validateItems)
.handle(deliver);
}
编辑:
您好 Artem,我在下面的代码中添加了 Wire Tap。仍然将 WireTap 节点作为 Sequencal 执行并等待该节点。
请帮助使其成为Aysnc节点。
@Bean
public IntegrationFlow log() {
return f -> f.handle(auditProcessor).channel("nullChannel");
}
@ServiceActivator
@Description("Call and get the Offers Request")
public void getDetails(Message<Context> message) throws InterruptedException {
log.info("getDetails-Sleep-Start");
Thread.sleep(3000);
log.info("getDetails-Sleep-End");
}
对于 Spring 集成 Java DSL,我们都缺少 Spring 集成中非常重要的组件之一是 MessageChannel
。事实上,只要我们需要超过默认值 DirectChannel
,就可以将通道添加到流中。对于异步执行,我们有一个 ExecutorChannel
。但是在我们开始分叉流程之前,我们需要以某种方式跳到那里而不破坏主要流程。就 EIP 而言,这称为 Wire-Tap:https://www.enterpriseintegrationpatterns.com/patterns/messaging/WireTap.html.
Spring 集成 Java DSL 建议在流程中采用类似 .wireTap()
运算符的实现。审计逻辑可以在 tapped 子流或通道中实现,但不要忘记 ExecutorChannel
!
您可以在参考手册中查看更多信息:https://docs.spring.io/spring-integration/reference/html/java-dsl.html#java-dsl-wiretap
更新
.handle(buildItems)
.wireTap(log())
是正确的方法:您将审核 buildItems
的结果并继续下一步。
log()
必须这样修改:
@Bean
public IntegrationFlow log() {
return f -> f.channel(c -> c.executor(taskExecutorBean())).handle(auditProcessor).channel("nullChannel");
}
关注c.executor()
。通过这种方式,我们为 log()
子流程添加了异步切换。