我是 Spring Integration 的新手,正在尝试解决这个问题。我有以下流程:
@Bean
IntegrationFlow incomingFlow(
@Qualifier("auditTrailFlow") IntegrationFlow auditTrailFlow,
MyTransform myTransform
) {
return IntegrationFlow
.from("channel.incoming")
.route("headers['vendor']", mapping -> mapping
.subFlowMapping("vendor1", subFlowMapping -> subFlowMapping
.publishSubscribeChannel(messageTaskExecutor, pubSubConfig -> pubSubConfig
.subscribe(subFlow -> subFlow
.enrichHeaders(headerEnricherSpec -> {
headerEnricherSpec.header("action", "request");
headerEnricherSpec.header("extSys", "vendor1");
})
.to(auditTrailFlow))
.subscribe(subFlow -> subFlow
.gateway(searchTypeFlow())
.gateway("channel.send.message")
.transform(myTransform)
.publishSubscribeChannel(messageTaskExecutor, p -> p
.subscribe(s -> s
.enrichHeaders(headerEnricherSpec -> {
headerEnricherSpec.header("action", "response");
headerEnricherSpec.header("extSys", "vendor1");
})
.to(auditTrailFlow))
.subscribe(s -> s.<PayoffQuote>handle((payload, headers) -> payload))))))
.subFlowMapping("vendor2", subFlowMapping -> subFlowMapping.to(otherFlow())))
.get();
}
第一个 publishSubscribeChannel 下的第一个订阅是我只想开始的流程,我不关心那个流程中会发生什么。有没有办法触发该流程以使其返回值被忽略?好像我必须在 pubSub 流程之外做。
在第二个 publishSubscribeChannel 中再次使用相同的流程,同样,我不关心该流程中发生了什么。我只想启动该流程(甚至可以是异步的)并继续主流。
理想情况下我想做这样的事情:
@Bean
IntegrationFlow incomingFlow(
@Qualifier("auditTrailFlow") IntegrationFlow auditTrailFlow,
MyTransform myTransform
) {
return IntegrationFlow
.from("channel.incoming")
.kickOffAsync(auditTrailFlow)
.route("headers['vendor']", mapping -> mapping
.subFlowMapping("vendor1", subFlowMapping -> subFlowMapping
.publishSubscribeChannel(messageTaskExecutor, pubSubConfig -> pubSubConfig
.subscribe(subFlow -> subFlow
.gateway(searchTypeFlow())
.gateway("channel.send.message")
.transform(myTransform)))))
.subFlowMapping("vendor2", subFlowMapping -> subFlowMapping.to(otherFlow())))
.kickOffAsync(auditTrailFlow) // this would have the result from what happens in the .route flow
.get();
}