Spring Integration DSL - 触发子流并忽略响应

问题描述 投票:0回答:0

我是 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();
}
spring spring-boot spring-integration-dsl
© www.soinside.com 2019 - 2024. All rights reserved.