多重独立积分流程

Multiple Independent IntegrationFlow

以下是在同一 Spring 引导应用程序中配置多个独立 IntegrationFlow 的正确方法吗?还有什么可以做的优化吗?

@Bean("flow1")
public IntegrationFlow integrationFlow1() {

    return IntegrationFlows.from(jdbcMessageSource1(), p -> p.poller(pollerSpec1()))
                            .split()
                            .channel(c -> c.executor(Executors.newCachedThreadPool()))
                            .transform(transformer1, "transform")
                            .enrichHeaders(headerEnricherSpec -> headerEnricherSpec.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))
                            .handle(Http.outboundGateway(url1)
                                        .httpMethod(HttpMethod.POST)
                                        .expectedResponseType(String.class)
                                        .requestFactory(requestFactory))
                            .get();
}

@Bean("flow2")
public IntegrationFlow integrationFlow2() {

    return IntegrationFlows.from(jdbcMessageSource2(), p -> p.poller(pollerSpec2()))
                            .split()
                            .channel(c -> c.executor(Executors.newCachedThreadPool()))
                            .transform(transformer2, "transform")
                            .enrichHeaders(headerEnricherSpec -> headerEnricherSpec.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))
                            .handle(Http.outboundGateway(url2)
                                        .httpMethod(HttpMethod.POST)
                                        .expectedResponseType(String.class)
                                        .requestFactory(requestFactory))
                            .get();
}

到目前为止,您所拥有的一切都是完全合法的。

如果您的流程不共享任何共同的逻辑,那么应该具有类似的结构。另一方面,即使它们目前看起来相似,也不意味着它们的逻辑(一个或两个)将来可能不会改变。当然,将您的业务逻辑划分为单独的微服务会更安全,但在同一应用程序中拥有多个工作单元并没有错。

您可能需要注意 Spring Boot 中的 shared ThreadPoolTaskScheduler 默认只有一个线程。因此,为了并行支持这些轮询流程,您可以增加池配置:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.task-execution-and-scheduling