多重独立积分流程
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
以下是在同一 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