2013-03-26 122 views
1

我目前正在開發一個駱駝集成應用程序,其中從以前的處理狀態恢復很重要。例如,當停電時,重新處理所有以前處理的消息是非常重要的。處理過程應從停機之前停止的地方恢復。停電後恢復駱駝處理

我已經通過了一些可能的解決方案,包括秦始皇和Apache Shiro不見了。我不確定如何使用作爲與Apache Camel集成的文檔很少。然而,我還沒有解決這兩個問題。

我正在尋找在我可以使用潛在替代品或指向一些教程建議,讓我開始。

回答

2

尚存停電的困難主要在於國家,以及如何在飛行中消息。

通常情況下,當你的路線內通話狀態的方法是將其刷新到磁盤,或集羣中的其他節點。以聚合模式爲例,聚合狀態將保存在聚合存儲庫中。默認的實現是在內存中,所以如果電源熄滅,所有的狀態都會丟失。但是,還有其他的實現,包括一個用於JDBC的實現,以及另一個實現,使用Hazelcast(一種輕量級的內存數據網格)。我自己並沒有使用Hazelcast,但是JDBC會對磁盤進行同步寫入。聚合器模式可讓您從停止的位置恢復。類似的解決方案存在冪等消費。

第二個問題,各地正在進行的消息是稍微複雜一點,並在很大程度上取決於你在哪裏消費。如果您處於處理Web服務請求的過程中,並且電源熄滅,如果您丟失了該信息,那麼這一點很重要嗎?用戶可以簡單地重試。對外部系統的任何影響都可以封裝在一個事務中,或者是一個具有JDBC冪等存儲庫的冪等消費者。

如果你正在構建基於消息的集成,你應該在一個事務中消耗,因此,如果您的服務器出現故障,這些消息再度進入經紀人和可以重播到另一個消費者。

使用seda:threads塊時要小心,這些塊使用內存中的隊列來傳遞線程之間的交換,如果有人絆倒電源線,任何沿這些類型的路由傳遞的消息都將丟失。如果您無法承受消息丟失,並且需要這種類型的處理模型,請考慮使用JMS隊列作爲兩條路線之間的端點(使用事務處理以確保您從中斷點繼續)。

+0

這是非常有用的建議,@Jake。我會根據你的建議做更多的研究。 – okello 2013-03-27 04:49:48