2012-10-30 42 views
0

處理所有消息什麼是它處理的是源於一系列的FTP出站網關ls命令的所有消息後停止Spring集成應用的最佳方式後?停止Spring集成的應用程序從FTP列表

作爲一次性的工作,我需要遍歷一個FTP目錄結構,遞歸找到的每個目錄,並抄下每一個文件,然後把它作爲信息進行處理。一旦FTP目錄樹已完全遍歷,所有由遍歷產生的消息都已處理完畢,我想要優雅地停止應用程序。

我現在的想法是,我會盡量保持在網關和所有隊列的活動軌跡,當他們都具有一個大小爲0的同時,終止應用程序。通過執行這樣的操作可以使得更復雜一些,如保持每個目錄的所有文件的計數(這需要擴展AbstractRemoteFileOutboundGateway),確保目錄名保留在通過流的所有消息頭中,然後具有下游組件保持每個目錄處理的消息的計數,並且一旦它們全部被計入,就啓動關閉。

這聽起來像一個相當數量的工作 - 沒有人知道一個簡單的方法?我可以選擇在沒有Spring Integration的情況下編寫應用程序,並手動執行繁重的工作(迭代FTP樹,複製文件)或使用Spring Integration,但必須擴展它的某些部分以匹配我的用例。

回答

1

稍微迂迴的,但是這是我能想到的辦法:

0.1。由於必須將消息放到觸發ftp出站網關的位置,所以在觸發所有消息後,將帶有STOP的僞消息稱爲有效負載。在出站ftp網關之前,將路由器放置到位,可以選擇性地將消息發送到ftp網關或步驟後FTP網關 - 通過一次只接受一條消息的通道發送消息,以便消息被序列化。

.2。一旦在您的文件處理通道中收到停止消息時,將此消息發送到特定隊列通道,如停止隊列通道。

.3。在你的主程序中獲得對這個停止隊列通道的引用,並且一旦你開始了SI流程,就等待消息進入隊列通道,一旦STOP消息進入這個隊列通道,你的主要方法將繼續並且流程應該停止在此刻。

相關問題