Spring Integration DSL - 如何使用DSL立即启动异步IntegrationFlow?

时间:2017-09-26 14:58:12

标签: spring spring-integration spring-integration-dsl

我有一个异步IntegrationFlow,它在不同的环境中有一些不同的行为。我将它部署在一个环境中当我通过网关呼叫时,它会立即启动(这是所需的行为)。我将它部署在不同的环境中IntegrationFlow将在每个小时的顶部启动,当我在同一项目中运行单独的cron IntegrationFlow时。我的问题是如何配置此IntegrationFlow在调用它时立即启动或手动调用它以便它始终立即运行。我真的很感激任何帮助。这是我的代码:

网关

@MessagingGateway
public interface SearchGateway {

    @Gateway(requestChannel = "searchFlow.input")
    void mySearch(FlowSearchDto flowSearchDto);

}

IntegrationFlow

@SuppressWarnings({ "unchecked", "rawtypes" })
@Component
public class SearchEndpoint {

@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller() {
    return Pollers.fixedDelay(1000).get();
}

@Bean(value = "searchFlow")
public IntegrationFlow searchFlow() {
  return IntegrationFlows
    .from("searchFlow.input")
    .split("payload.requestList", (Consumer) null)
    .channel(MessageChannels.executor(Executors.newCachedThreadPool()))
    .enrichHeaders(new Consumer<HeaderEnricherSpec>() {

      @Override
      public void accept(HeaderEnricherSpec t) {
        t.header(HttpHeaders.CONTENT_TYPE, "application/json;charset=utf8");
        t.header(MessageHeaders.ERROR_CHANNEL, "searchErrorChannel");
        t.headerExpression("restRequestDto", PAYLOAD);
        t.defaultOverwrite(true);
      }

    })
    .route("payload.serviceName", new Consumer<RouterSpec<String, ExpressionEvaluatingRouter>>() {

      @Override
      public void accept(RouterSpec<String, ExpressionEvaluatingRouter> spec) {
        spec.channelMapping(ServiceEndpointType.ABC.getServiceName(), "searchAbc")
            .channelMapping(ServiceEndpointType.DEF.getServiceName(), "searchDef")
            .channelMapping(ServiceEndpointType.GHI.getServiceName(), "searchGhi");
      }

    })
    .get();
}

@Bean(value = "searchAbcFlow")
public IntegrationFlow searchAbcFlow() {
return IntegrationFlows
    .from(MessageChannels.queue("searchAbc", 10))
    .enrichHeaders(new Consumer<HeaderEnricherSpec>() {

      @Override
      public void accept(HeaderEnricherSpec t) {
        t.header("url", searchAbcServiceUrl);
        t.defaultOverwrite(true);
      }

    })
    .handle(restClientHandler)
    .handle(message -> {})
    .get();
  }
}

致电服务

@Service
public class MyServiceImpl implements MyService {
  @Override
  public boolean myIntegrationSearch(FlowSearchDto flowSearchDto) {

    // I NEED THIS CALL TO KICK OFF THE ASYNCHRONOUS FLOW IMMEDIATELY!!!
    searchGateway.mySearch(flowSearchDto);

    return true;
  }
}

0 个答案:

没有答案