|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
入站通道适配器:控制远程文件获取
在配置入站通道适配器时,您应该考虑两个属性。
max-messages-per-poll:与所有轮询器一样,可用于限制每次轮询发出的消息数量(如果准备好的消息超过配置值)。
max-fetch-size(自 5.0 版本起)可限制从远程服务器一次性检索的文件数量。
以下场景假设起始状态是一个空的本地目录:
-
max-messages-per-poll=2和max-fetch-size=1:适配器获取一个文件,将其发出,然后获取下一个文件并再次发出。 随后它会休眠直到下一次轮询。 -
max-messages-per-poll=2andmax-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 用于另一种场景是:当您希望停止获取远程文件,但继续处理已获取的文件时。
在 MessageSource(通过编程方式、JMX 或 控制总线)上设置 maxFetchSize 属性,可有效阻止适配器继续获取新文件,同时允许轮询器继续为之前已获取的文件发送消息。
如果更改属性时轮询器处于活动状态,则更改将在下一次轮询时生效。
从版本 5.1 开始,同步器可以接收一个 Comparator<?>。
当限制获取的文件数量为 maxFetchSize 时,这非常有用。
从 6.4 版本开始,AbstractRemoteFileStreamingMessageSource 现在提供了一个便捷的 clearFetchedCache() API,用于从缓存中移除未处理的远程文件的引用。
这些引用会保留在缓存中,因为轮询配置不允许在一个周期内处理所有引用,并且在轮询周期之间目标 SessionFactory 可能会发生变化,例如通过 RotatingServerAdvice。
另请参阅一般的 SFTP 入站通道适配器 章节,以获取有关 FileListFilter 配置的信息。