【发布时间】:2021-01-02 01:02:29
【问题描述】:
我正在开发一个基于注释的配置的 Spring 集成项目。 我们从另一个团队继承了这个项目,并试图弄清楚 ThreadPoolTaskExecutors 是否被正确使用。下面是TaskExecutors的配置:
@Bean
public TaskExecutor businessTaskExecutor() {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
pool.setCorePoolSize(30);
pool.setMaxPoolSize(Integer.MAX_VALUE);
pool.setQueueCapacity(Integer.MAX_VALUE);
return pool;
}
@Bean
public TaskExecutor eventTaskExecutor() {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
pool.setCorePoolSize(30);
pool.setMaxPoolSize(Integer.MAX_VALUE);
pool.setQueueCapacity(Integer.MAX_VALUE);
return pool;
}
上面定义了5个TaskExecutor。我不是专家,但我确信它们应该进行不同的配置。这些执行器的用法如下:
@Bean
public MessageChannel inputChannel() {
return new PublishSubscribeChannel(businessTaskExecutor());
}
@Bean
public MessageChannel outputChannel() {
PublishSubscribeChannel outputChannel = new PublishSubscribeChannel(
businessTaskExecutor());
outputChannel
.addInterceptor(new WireTap(eventTrackerChannel()));
return outputChannel;
}
@Bean
public MessageChannel eventTrackerChannel() {
return new ExecutorChannel(eventTaskExecutor());
}
输入和输出通道在某些 ServiceActivator 中使用。 eventTrackerChannel 用于拆分 Spring Integration 流并在 DB 上写入一些事件。这些只是了解项目结构的示例。
现在的问题是,taskexecutors 的使用是否正确?如果我们消除 ThreadPoolTaskExecutors 并且没有为通道提供它们,那么 Spring 是否应该管理线程?采用第二种方法会不会有问题?
我想尽我所能学习 Spring Integration,这些问题的答案会很有帮助。我提前感谢谁会帮助我理解这种行为。
【问题讨论】:
标签: java spring spring-integration publish-subscribe threadpoolexecutor