【发布时间】:2018-10-04 12:20:02
【问题描述】:
为了完成这项工作,我苦苦挣扎了几天。我想要完成的是从主流中调用不同的子流(即集成流),基于消息内容并在子流完成后返回到主流。它就像委派责任给一个特定的类来完成某事并返回主流。该责任也可能需要一些步骤,因此它也作为流程实施。这是我的主要流程:
public IntegrationFlow processingFlow(
MessageChannel eventIn,
MessageChannel eventOut,
ChangedEventsLoader changedEventsLoader,
CalculatorRouter calculatorRouter) {
return IntegrationFlows.from(eventIn)
.handle(changedEventsLoader)
.route(
CalculatorRouter::getSportId,
CalculatorRouter::routeCalculation)
.channel(eventOut)
.get();
}
这是路由器的实现:
@Service
@AllArgsConstructor
public class CalculatorRouter {
private final MessageChannel eventOut;
public RouterSpec<Integer, MethodInvokingRouter> routeCalculation(
RouterSpec<Integer, MethodInvokingRouter> mapping) {
return mapping
.channelMapping(1, "subflowCalculationChannel")
.defaultOutputToParentFlow();
}
public Integer getSportId(Event event) {
return 1;
}
@Bean
public MessageChannel subflowCalculationChannel() {
return MessageChannels.direct().get();
}
}
这是一个子流程的示例:
@Configuration
@AllArgsConstructor
public class CalculatorExample {
@Bean
public IntegrationFlow calculateProbabilities(MessageChannel subflowCalculationChannel) {
return IntegrationFlows.from(subflowCalculationChannel)
.<Event>handle((p, m) -> p * 2)
.get();
}
}
问题是子流错过了与主流的一些连接。我试图通过在路由部分使用 defaultOutputToParentFlow() 来解决这个问题,但这还不够。
【问题讨论】: