入站通道适配器:控制远程文件获取
配置入站通道适配器时,应考虑两个属性。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
:适配器最多可获取 4 个文件(如果可用)并发出前两个文件(如果至少有两个)。 接下来的两个文件将在下一次轮询时发出。 -
max-messages-per-poll=2
和max-fetch-size
未指定:适配器获取所有远程文件并发出前两个文件(如果至少有两个)。 后续文件在后续轮询(一次两个)时发出。 当所有文件都被消耗掉时,将再次尝试远程获取,以拾取任何新文件。
当您部署应用程序的多个实例时,我们建议将max-fetch-size ,以避免一个实例“抓取”所有文件并使其他实例饥饿。 |
另一种用途max-fetch-size
是当您想要停止获取远程文件但继续处理已获取的文件时。
设置maxFetchSize
属性MessageSource
(以编程方式,通过 JMX 或通过控制总线)有效地阻止适配器获取更多文件,但允许轮询器继续为之前获取的文件发出消息。
如果在属性更改时轮询器处于活动状态,则更改将在下一次轮询时生效。
从 5.1 版开始,同步器可以为Comparator<?>
.
这在限制使用maxFetchSize
.
从 6.4 版开始,AbstractRemoteFileStreamingMessageSource
现在有一个方便的clearFetchedCache()
用于从缓存中删除未处理的远程文件的引用的 API。
引用保留在缓存中,因为轮询配置不允许在一个周期内处理所有引用,并且目标SessionFactory
可能会在轮询周期之间更改,例如通过RotatingServerAdvice
.
另请参阅一般 SFTP 入站通道适配器章节,了解有关FileListFilter
配置。