入站通道适配器:控制远程文件获取
在配置入站通道适配器时,您应该考虑两个属性。max-messages-per-poll
与所有轮询器一样,可用于限制每次轮询时发出的消息数量(如果准备好的消息超过配置值)。max-fetch-size
(自版本 5.0 起)可以限制一次从远程服务器检索的文件数量。
以下场景假设初始状态是空的本地目录
-
max-messages-per-poll=2
和max-fetch-size=1
:适配器获取一个文件,发出它,获取下一个文件,发出它,然后休眠直到下次轮询。 -
max-messages-per-poll=2
和max-fetch-size=2
:适配器获取两个文件,然后分别发出它们。 -
max-messages-per-poll=2
和max-fetch-size=4
:适配器最多获取四个文件(如果可用),并发出前两个(如果至少有两个)。接下来的两个文件将在下次轮询时发出。 -
max-messages-per-poll=2
且max-fetch-size
未指定:适配器获取所有远程文件,并发出前两个(如果至少有两个)。后续文件将在后续轮询中发出(一次两个)。当所有文件都被消费后,远程获取将再次尝试,以获取任何新文件。
当您部署多个应用程序实例时,我们建议使用较小的 max-fetch-size ,以避免一个实例“抢占”所有文件并使其他实例“饿死”。
|
max-fetch-size
的另一个用途是,如果您想停止获取远程文件,但继续处理已获取的文件。在 MessageSource
上设置 maxFetchSize
属性(以编程方式,使用 JMX 或使用 控制总线)实际上会阻止适配器获取更多文件,但允许轮询器继续发出已获取文件的邮件。如果轮询器在属性更改时处于活动状态,则更改将在下次轮询时生效。
从 5.1 版本开始,同步器可以提供一个 Comparator<FTPFile>
。当使用 maxFetchSize
限制获取的文件数量时,这很有用。
另请参阅有关 FileListFilter
配置的一般 FTP 入站通道适配器 章节。