入站通道介面卡:控制遠端檔案抓取

配置入站通道介面卡時,應考慮兩個屬性。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 的另一個用途是當你希望停止抓取遠端檔案,但繼續處理已經抓取的檔案時。透過程式設計、JMX 或控制匯流排MessageSource 上設定 maxFetchSize 屬性可以有效地阻止介面卡抓取更多檔案,但允許輪詢器繼續為先前已抓取的檔案發出訊息。如果在屬性更改時輪詢器處於活動狀態,則更改將在下一次輪詢時生效。

從版本 5.1 開始,可以為同步器提供一個 Comparator<?>。這在使用 maxFetchSize 限制抓取檔案數量時很有用。

從版本 6.4 開始,AbstractRemoteFileStreamingMessageSource 現在提供了一個方便的 clearFetchedCache() API,用於從快取中移除未處理的遠端檔案引用。這些引用之所以留在快取中,是因為輪詢配置不允許在一個週期內處理所有檔案,並且目標 SessionFactory 可能會在輪詢週期之間發生變化,例如透過 RotatingServerAdvice

另請參閱常規的 SFTP 入站通道介面卡章節,瞭解有關 FileListFilter 配置的資訊。