入站通道适配器:控制远程文件获取

在配置入站通道适配器时,您应该考虑两个属性。max-messages-per-poll 与所有轮询器一样,可用于限制每次轮询时发出的消息数量(如果准备的消息超过配置值)。max-fetch-size(从版本 5.0 开始)可以限制一次从远程服务器检索的文件数量。

以下场景假设起始状态是本地目录为空。

  • max-messages-per-poll=2max-fetch-size=1:适配器获取一个文件,发出它,获取下一个文件,并发出它。然后它休眠直到下次轮询。

  • max-messages-per-poll=2max-fetch-size=2:适配器获取两个文件,然后分别发出它们。

  • max-messages-per-poll=2max-fetch-size=4:适配器获取最多 4 个文件(如果可用)并发出前两个(如果有至少两个)。接下来的两个文件将在下次轮询时发出。

  • max-messages-per-poll=2 且未指定 max-fetch-size:适配器获取所有远程文件并发出前两个(如果有至少两个)。后续文件在后续轮询中发出(一次两个)。当所有文件都被消费后,远程获取将再次尝试,以获取任何新文件。

当您部署多个应用程序实例时,我们建议设置一个较小的 max-fetch-size,以避免一个实例“抢占”所有文件并使其他实例饿死。

max-fetch-size 的另一个用途是当您想要停止获取远程文件但继续处理已经获取的文件时。在 MessageSource 上设置 maxFetchSize 属性(以编程方式,通过 JMX 或通过 控制总线)有效地阻止适配器获取更多文件,但允许轮询器继续发出先前获取的文件的消息。如果轮询器在更改属性时处于活动状态,则更改将在下次轮询时生效。

从版本 5.1 开始,同步器可以提供一个 Comparator<?>。当使用 maxFetchSize 限制获取的文件数量时,这很有用。

另请参阅有关 FileListFilter 配置的一般 SFTP 入站通道适配器 章节。