2012-12-03 47 views
5

我有一個頂級演員(監護人下),名爲Groups,啓動時需要從數據庫加載組列表並創建一堆兒童演員基於數據庫中的那些組。什麼是從數據庫初始化演員的最佳實踐方式

我已經將數據庫加載代碼放在preStart函數中,因爲我不希望在加載組之前處理任何消息。

目前我的Groups演員看起來像這樣;

var groups: Map[String, ActorRef] = Map() 

override def preStart() = { 
    groups = getGroupsFromDB() map createGroup 
} 

def createGroup(pair: (String, Long)) = { 
    val (name, id) = pair 
    val group = context.actorOf(Props(new Group(id, name)), name = name) 

    name -> group 
} 

但是我不相信這是處理這個問題的最好方法,因爲如果數據庫服務器不可用會發生什麼?那麼從數據庫中處理數據初始化的最佳實踐方式是什麼?

回答

1

Akka documentation解釋如何監督頂級參與者的容錯。

您可以將原理應用於管理數據庫不可用時可能會遇到的異常。

+0

謝謝,我已將該頁面的想法用於我的設計中。即具有分離的存儲/數據庫角色。我希望有一個如何管理數據庫連接的代碼示例。 – Phenix

相關問題