我正在使用spring集成来对通道输出执行并行处理。我要求进行的并行操作量需要可控 - 所以我需要能够增加它或降低它。这是我目前的设置:
<service-activator input-channel="computerInputChannel" ref="computer" method="compute">
<poller task-executor="computerRequestExecutor" fixed-rate="1000"></poller>
</service-activator>
<task:executor id="computerRequestExecutor" pool-size="1" queue-capacity="100" />
<channel id="computerInputChannel"><queue/></channel>
在代码中,当我想改变并行度时,我运行setCorePoolSize方法。
我的问题是,当我增加核心池大小时,我会增加并行性,但是当我减小核心池大小时,增加的并行性不会消失。例如,如果核心池大小最初设置为1,我看到任务一次运行一个。如果它被设置为5,我看到它们一次运行5。但如果我将其重置为1,他们将继续一次运行5。
如何限制并行度?
我可以按照代码查看是否正在从ThreadPoolExecutor类调用interruptIfIdle(),但是没有任何东西来自。
我对弹簧整合很新,可能从错误的角度来看待这个问题。如何实现我想要的任何帮助或替代建议都会很棒。
This post几乎是我的确切问题,如果我写的不清楚 - 不幸的是它从未被回答过。
答案 0 :(得分:2)
基本上我需要确保任务执行程序的队列大小为0,保持活动时间为0,并且轮询器上的每个轮询的max-messages-poll为1。
答案 1 :(得分:1)
如果我理解正确,我认为您实际上想要更改maxPoolSize。如果核心增长,则max也会增长,使得以下条件始终为真:max&gt; = core
如果core为1且max为5,则还会配置给定的空闲时间/任务限制设置,池可以从最大值缩小到核心大小。
希望有所帮助。