1

我正在使用 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() ,但没有任何结果。

我对弹簧集成非常陌生,可能从错误的角度来处理这个问题。关于如何实现我想要的任何帮助或替代建议都会很棒。

如果我写的内容不清楚,这篇文章几乎是我的确切问题 - 不幸的是,它从未得到回答。

4

2 回答 2

2

我收到了来自spring 集成论坛的回答

基本上我需要确保任务执行器的队列大小为 0,保持活动时间为 0,轮询器上的 max-messages-per-poll 为 1。

于 2013-02-28T14:46:28.160 回答
1

如果我理解正确,我认为您实际上想要更改 maxPoolSize。如果核心增长,max 也会增长,使得以下条件始终为真:max >= core

如果 core 是 1 并且 max 是 5,那么给定的空闲时间/任务限制设置也被配置,池可以从 max 缩小到 core 大小。

希望有帮助。

于 2013-02-26T14:04:37.297 回答