我有兩個系統,稱它們爲A和B. 當A,A中的某些重要對象更改通過Apache Camel發送給B時。 但是,我遇到了一種情況,當A實際上有對象的更改日誌,而B必須只反映對象的實際狀態。 此外,A中的更改日誌可以包含「將來」記錄。這意味着,對象的狀態改變將在未來的某個時刻進行。 系統A的用戶可以編輯此更改日誌,刪除更改記錄,添加帶有任何時間戳記(過去和未來)的新更改記錄,甚至更新現有更改。 當然,A將這些更改記錄發送給B,但B只需要對象的實際狀態。在Apache Camel中將更改日誌轉換爲實際狀態
請注意,我可以從A查詢對象,但A是性能關鍵系統,因此我不會查詢某些內容,因爲它可能會導致額外的負載。 此外,從A查詢數據的API過於複雜,我希望儘可能避免使用它。
我可以在這裏看到兩個問題。 首先是實現更改日誌記錄中的特定更改是否可能導致更改實際狀態。 我打算將更改日誌存儲在中間數據庫中。 隨着更改日誌記錄的到來,我將在中間數據庫中添加/刪除/更新它,然後計算對象的實際狀態並將此狀態發送給B.
其次是跟蹤更改計劃。 除了在固定的時間間隔內運行定期作業(比如15分鐘),我無法發明任何東西。 此作業將掃描從上次調用到當前調用的時間間隔內的所有記錄。
我喜歡Apache Camel for是基於組件的方法,當您只需要連接端點並獲得所有工作,只需少量編碼即可。 在Apache Camel和EIP中,這個問題是否有預先存在的原語?
你說API查詢來自A的數據過於複雜。你打算如何從A獲取數據? A有沒有推送機制?你打算直接訪問A的倉庫嗎?你打算修改A嗎?如果是這樣,爲什麼不添加更好的API來查詢緩存機制來保護性能? – Sergey 2014-10-10 07:00:09
當A檢測到某個實體發生了變化時,它會將其序列化爲XML並將其寫入文件系統中的文件中。我使用以下消費者:'<從uri =「ftp://路徑到目錄」>'。另外,A有一個推送所有數據的機制,我將用它來初始加載數據。我沒有A的代碼,我也不能影響它的查詢API,也不能緩存緩存。此外,這也是一個政策問題:如果我能證明這輛公交車不會影響A的性能,那麼說服A的車主更容易接受集成巴士。 – 2014-10-10 07:10:40
你的情況不是微不足道的,我不相信你可以找到任何銀彈解決方案。最接近的組件AFAIK是http://camel.apache.org/cache.html。如果不適合,您可以隨時使用基於數據庫的解決方案,使用Camel提供的所有額外服務,例如交易,監控等 – Sergey 2014-10-10 08:13:39