我正在使用 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() ,但没有任何结果。
我对弹簧集成非常陌生,可能从错误的角度来处理这个问题。关于如何实现我想要的任何帮助或替代建议都会很棒。
如果我写的内容不清楚,这篇文章几乎是我的确切问题 - 不幸的是,它从未得到回答。