2013-08-08 27 views
5

Il mio caso d'uso è molto semplice - per scambiare pochi messaggi (<) tra due oggetti, gli attori di Scala erano eccellenti per questo scopo (peso leggero, nessuna gestione complicata del ciclo di vita, avvio/termine in qualsiasi momento).C'è qualche attore leggero in Akka?

Ora sto migrando dagli attori di Scala ad Akka, tuttavia non riesco più a trovare quegli attori leggeri!

Con Akka, non solo ho bisogno di creare ActorSystem/Props per la creazione di attori, ma anche di occuparmi del ciclo di vita di ActorSystem.

Esiste un Akka Actor che non richiede una gestione complicata del ciclo di vita di ActorSystem?

risposta

5

È possibile creare il proprio valore predefinito ActorSystem nell'oggetto Singleton globale e non è necessario arrestarlo manualmente, ma si arresterà al momento dell'arresto del programma.

UPD

Vedi l'answer da Roland Kuhn per soluzione come prevenire ActorSystem di mantenere la JVM di arrestare.

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

È possibile utilizzare package object per tale scopo.

Si potrebbe anche usare per ActorDSL leggero sintassi creazione attore:

import ActorDSL._ 
import global._ 

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

attori sono entità di elaborazione attivi, quindi hanno bisogno di chiudere quando non più necessari. È possibile rendere implicito il ciclo di vita di ActorSystem impostando akka.daemonic=on, il che significa che non impedirà la chiusura della JVM, ma significa anche che è compito dell'utente assicurarsi che gli attori abbiano terminato il proprio lavoro al ritorno del programma principale.

+0

Grazie mille per le informazioni extra! –

Problemi correlati