2013-08-08 12 views
5

Mój przypadek użycia jest bardzo prosty - aby wymienić kilka (< 100) wiadomości między dwoma obiektami, aktorzy Scali doskonale nadawali się do tego celu (lekka waga, brak skomplikowanego zarządzania cyklem życia, uruchamianie/kończenie w dowolnym momencie).Czy jest jakiś lekki aktor w Akka?

Teraz migruję od Scala Actors do Akka, jednak nie mogę już znaleźć tych lekkich aktorów!

Z Akka nie tylko muszę stworzyć ActorSystem/Props dla stworzenia Actor, ale także dbać o cykl życia ActorSystem.

Czy istnieje aktor Akka, który nie wymaga skomplikowanego zarządzania cyklem życia aktora?

Odpowiedz

5

Można utworzyć własny domyślny ActorSystem w globalnym obiekcie singleton i nie trzeba go zatrzymywać ręcznie - zatrzyma się po zamknięciu programu.

UPD

Zobacz answer przez Roland Kuhn do sporządzania roztworu, jak zapobiegać ActorSystem utrzymywania JVM z zamykaniem.

object global { 
    import com.typesafe.config.ConfigFactory 
    // From answer by Roland Kuhn 
    implicit lazy val actorSystem: ActorSystem = 
    ActorSystem("default", ConfigFactory.parseString("akka.daemonic=on")) 
} 

Do tego celu można użyć package object.

Można również użyć ActorDSL dla składni tworzenia aktor lekkiego:

import ActorDSL._ 
import global._ 

val a = actor(new Act { 
    become { 
     case msg => ... 
    } 
}) 
4

Aktorzy są aktywne podmioty produkcyjne, stąd muszą zamknąć, gdy nie są już potrzebne. Możesz ustawić tryb życia ActorSystem jako domyślny, ustawiając akka.daemonic=on, co oznacza, że ​​nie będzie on zatrzymywał maszyny JVM, ale oznacza to również, że Twoim zadaniem jest zapewnienie, że aktorzy wykonają swoją pracę, gdy powróci główny program.

+0

Dziękuję bardzo za dodatkowe informacje! –

Powiązane problemy