2013-08-08 5 views
5

Mein Anwendungsfall ist sehr einfach - um wenige (< 100) Nachrichten zwischen zwei Objekten auszutauschen, Scala-Aktoren waren hervorragend für diesen Zweck (geringes Gewicht, keine komplizierte Life-Cycle-Management, Start/zu jeder Zeit zu beenden).Gibt es in Akka leichte Schauspieler?

Jetzt migriere ich von Scala Actors zu Akka, aber ich kann diese leichten Schauspieler nicht mehr finden!

Mit Akka, muss ich nicht nur ActorSystem/Requisiten für die Actor-Erstellung erstellen, sondern muss auch auf den Lebenszyklus von ActorSystem achten.

Gibt es einen Akka Actor, der keine komplizierte ActorSystem-Lebenszyklusverwaltung erfordert?

Antwort

5

Sie könnten Ihre eigenen Standard ActorSystem in globalen Singleton-Objekt erstellen und Sie müssen es nicht manuell stoppen - es wird beim Herunterfahren des Programms stoppen.

UPD

die answer von Roland Kuhn für Lösung Sehen Sie, wie die JVM von halten verhindern ActorSystem heruntergefahren.

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

Sie könnten package object für diesen Zweck verwenden.

Sie könnten auch ActorDSL für leichtgewichtige Schauspieler Erstellung Syntax:

import ActorDSL._ 
import global._ 

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

Schauspieler sind aktive Verarbeitungseinheiten, daher müssen sie heruntergefahren, wenn nicht mehr benötigt. Sie können den ActorSystem-Lebenszyklus implizit festlegen, indem Sie akka.daemonic=on festlegen, was bedeutet, dass die JVM nicht heruntergefahren wird, aber es bedeutet auch, dass Sie sicherstellen müssen, dass die Akteure mit ihrer Arbeit fertig sind, wenn Ihr Hauptprogramm zurückkehrt.

+0

Vielen Dank für die zusätzlichen Informationen! –

Verwandte Themen