入站通道介面卡:控制遠端檔案抓取
配置入站通道介面卡時,應考慮兩個屬性。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
的另一個用途是當你希望停止抓取遠端檔案,但繼續處理已經抓取的檔案時。透過程式設計、JMX 或控制匯流排在 MessageSource
上設定 maxFetchSize
屬性可以有效地阻止介面卡抓取更多檔案,但允許輪詢器繼續為先前已抓取的檔案發出訊息。如果在屬性更改時輪詢器處於活動狀態,則更改將在下一次輪詢時生效。
從版本 5.1 開始,可以為同步器提供一個 Comparator<?>
。這在使用 maxFetchSize
限制抓取檔案數量時很有用。
從版本 6.4 開始,AbstractRemoteFileStreamingMessageSource
現在提供了一個方便的 clearFetchedCache()
API,用於從快取中移除未處理的遠端檔案引用。這些引用之所以留在快取中,是因為輪詢配置不允許在一個週期內處理所有檔案,並且目標 SessionFactory
可能會在輪詢週期之間發生變化,例如透過 RotatingServerAdvice
。
另請參閱常規的 SFTP 入站通道介面卡章節,瞭解有關 FileListFilter
配置的資訊。