入站通道适配器:控制远程文件获取
配置入站通道适配器时,应考虑两个属性。
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
获取的文件数量时很有用。
另请参阅一般的 FTP 入站通道适配器 章,了解有关 FileListFilter
配置的信息。