Inbound Channel Adapters: Controlling Remote File Fetching
配置入站通道适配器时,应考虑两个属性。与所有轮询器一样,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
,以避免一个实例 “grabbing” 所有文件,让其他实例挨饿。
另一个使用 max-fetch-size
的场景是当您希望停止获取远程文件,但继续处理已经获取的文件。通过编程方式、JMX 或 control bus 设置 MessageSource
上的 maxFetchSize
属性,可有效停止适配器获取更多文件,但能让轮询器继续为先前已获取的文件发出消息。如果在该属性发生改变时轮询器处于活动状态,那么此次改变将在下一次轮询时生效。
从版本 5.1 开始,可以为同步器提供 Comparator<?>
。这在使用 maxFetchSize
限制获取的文件数时很有用。