2016-09-12 113 views
0

我們有其中一個大的輸入文件被衝進許多單獨的文件,然後彙總到一起使用Spring集成匯聚一Spring集成項目。Spring集成聚合時最後一個記錄過濾器

管道中有許多過濾器會過濾掉不需要的單個文件。我們跟蹤爲每個相關輸入文件過濾的文件數量。我們的@ReleaseStrategy檢查是否收到了單個文件的數量減去過濾的單個文件的數量。如果它擊中我們的ReleaseStrategy之前通過過濾來處理的最後一個單獨的文件

會發生什麼? ReleaseStrategy是爲每個到達它的文件調用的,如果最後一個單獨的文件被過濾了,我不會再被輪詢,但是我也希望Spring已經預見到了這個用例,併爲它提供了一些非hackish的規定,我與@Aggregator事件。如果我超時,或者如果我導致所有過濾點檢查以查看它們是否是最後一個文件,我都沒有收到@Aggregator事件。

謝謝!

+0

我們已經根據事件的順序確認測試片狀,我們需要解決這個問題。我看到ReleaseStrategy收到了這個消息的完整列表,就像Aggregator一樣。我們的聚合器需要保持狀態,記住ReleaseStrategyso的最後一個參數,我們可以僞造一個對Aggregator的調用。我不會將此標記爲問題的答案,因爲我仍然抱有希望有人會提出Spring批准的「正確方法」來做到這一點,但我認爲這是Spring Integration體系結構中的一個漏洞,它將過濾與聚合。 – DavesPlanet

回答

0

的正確答案斯普利特 - 過濾 - 聚合模式是設置在聚合豆以下屬性。

send-partial-result-on-expiry="true" 
group-timeout="5000" 

這兩個屬性一起處理的情況完全一樣描述的,在那裏,因爲最後一個記錄過濾我們ReleaseStrategy不會與最後一個記錄調用。一旦達到超時,這些設置將導致排隊等待釋放的任何內容。

超時是「靜默期」,如果對於給定的CorrelationStrategy沒有消息在超時時間內接收到的,則聚集體釋放。收到的每條消息都會重置超時。見(21): http://docs.spring.io/spring-integration/reference/htmlsingle/

相關問題