如何在 spring 集成上进行多线程轮询?
How to make polling multi-thread on spring integration?
我有以下 Spring 集成流程:
它从一个数据库收集记录,转换为 json 并发送到另一个数据库。
想法是有 10 个轮询器(通道 0 到 9)。每一个都是一个 pollingFlowChanN
Bean。但我怀疑他们共享同一个线程。
如何在这种情况下使轮询成为多线程?
private IntegrationFlow getChannelPoller(final int channel, final int pollSize, final long delay) {
return IntegrationFlows.from(jdbcMessageSource(channel, pollSize), c -> c.poller(Pollers.fixedDelay(delay)
.transactional(transactionManager)))
.split()
.handle(intControleToJson())
.handle(pgsqlSink)
.get();
}
@Bean
public IntegrationFlow pollingFlowChan0() {
return getChannelPoller(0, properties.getChan0PollSize(), properties.getChan0Delay());
}
@Bean
public IntegrationFlow pollingFlowChan1() {
return getChannelPoller(1, properties.getChan1PollSize(), properties.getChan1Delay());
}
....
我假设您使用最新的 Spring 引导,它有一个 TaskScheduler
自动配置的线程:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.spring-integration。这是您的任务使用相同线程的最佳猜测。
另请参阅此处的回答:
我有以下 Spring 集成流程:
它从一个数据库收集记录,转换为 json 并发送到另一个数据库。
想法是有 10 个轮询器(通道 0 到 9)。每一个都是一个 pollingFlowChanN
Bean。但我怀疑他们共享同一个线程。
如何在这种情况下使轮询成为多线程?
private IntegrationFlow getChannelPoller(final int channel, final int pollSize, final long delay) {
return IntegrationFlows.from(jdbcMessageSource(channel, pollSize), c -> c.poller(Pollers.fixedDelay(delay)
.transactional(transactionManager)))
.split()
.handle(intControleToJson())
.handle(pgsqlSink)
.get();
}
@Bean
public IntegrationFlow pollingFlowChan0() {
return getChannelPoller(0, properties.getChan0PollSize(), properties.getChan0Delay());
}
@Bean
public IntegrationFlow pollingFlowChan1() {
return getChannelPoller(1, properties.getChan1PollSize(), properties.getChan1Delay());
}
....
我假设您使用最新的 Spring 引导,它有一个 TaskScheduler
自动配置的线程:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.spring-integration。这是您的任务使用相同线程的最佳猜测。
另请参阅此处的回答: