2012-12-03 11 views
5

Mam aktora najwyższego poziomu (pod opiekunem), o nazwie Groups, który na starcie musi załadować listę grup z bazy danych i stworzyć grupę dzieci-aktorów na podstawie tych grup w bazie danych.Jaki jest najlepszy sposób inicjowania aktora z bazy danych?

Umieściłem kod ładowania bazy danych wewnątrz funkcji preStart, ponieważ nie chcę, aby jakiekolwiek wiadomości były przetwarzane przed załadowaniem grup.

Obecnie mój aktor Groups wygląda następująco;

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 
} 

Jednak nie sądzę, że jest to najlepszy sposób, aby poradzić sobie z tym, co się stanie, jeśli serwer bazy danych nie jest dostępny? Jaki jest najlepszy sposób obsługi inicjowania danych z bazy danych?

Odpowiedz

1

Akka documentation wyjaśnia, w jaki sposób nadzorować działania aktorów najwyższego poziomu w zakresie odporności na błędy.

Możesz zastosować zasady tam, aby zarządzać wyjątkami, które możesz znaleźć, jeśli DB nie jest dostępny.

+0

Dzięki, wziąłem pomysły z tej strony i wykorzystałem je w moim projekcie. tj. z wydzielonymi podmiotami Storage/DB. Szkoda, że ​​nie było próbki kodu, jak zarządzać połączeniami z bazą danych. – Phenix

Powiązane problemy