入站通道适配器:控制远程文件获取
在配置入站通道适配器时,应考虑两个属性。与所有 Poller 一样,可用于限制每次轮询时发出的消息数(如果已准备好超过配置的值)。 (自版本 5.0 起)可以限制一次从远程服务器检索的文件数。max-messages-per-poll
max-fetch-size
以下场景假定起始状态为空的本地目录:
-
max-messages-per-poll=2
and:适配器获取一个文件,发出该文件,获取下一个文件,然后发出该文件。 然后它会休眠,直到下一次轮询。max-fetch-size=1
-
max-messages-per-poll=2
和 ):适配器获取这两个文件,然后发出每个文件。max-fetch-size=2
-
max-messages-per-poll=2
和:适配器最多获取 4 个文件(如果可用)并发出前两个文件(如果至少有两个)。 接下来的两个文件将在下一次轮询时发出。max-fetch-size=4
-
max-messages-per-poll=2
和 not specified:适配器获取所有远程文件并发出前两个(如果至少有两个)。 后续文件将在后续轮询时发出(一次两个)。 当所有文件都被消耗掉时,将再次尝试远程获取以获取任何新文件。max-fetch-size
当您部署应用程序的多个实例时,我们建议设置一个小的 ,以避免一个实例“抓取”所有文件并耗尽其他实例。max-fetch-size |
另一个用途是当您想要停止获取远程文件但继续处理已获取的文件时。
在 上设置属性(以编程方式、通过 JMX 或通过控制总线)可以有效地阻止适配器获取更多文件,但允许 Poller 继续为以前获取的文件发出消息。
如果在更改属性时 poller 处于活动状态,则更改将在下一次轮询时生效。max-fetch-size
maxFetchSize
MessageSource
从版本 5.1 开始,可以为同步器提供 .
这在限制使用 获取的文件数量时非常有用。Comparator<?>
maxFetchSize
从版本 6.4 开始,现在有一个方便的 API,可以从缓存中删除未处理的远程文件的引用。
引用保留在缓存中,因为轮询配置不允许在一个周期内处理所有引用,并且目标可能会在轮询周期之间更改,例如通过 .AbstractRemoteFileStreamingMessageSource
clearFetchedCache()
SessionFactory
RotatingServerAdvice
另请参阅 SFTP 入站通道适配器 的一般章节,以了解有关配置的信息。FileListFilter