2013-08-08 3 views
5

Мой случай использования очень прост - для обмена несколькими сообщениями между двумя объектами, актеры Scala были превосходны для этой цели (легкий вес, без сложного управления жизненным циклом, запуск/завершение в любое время).Есть ли в Акке легкие актеры?

Теперь я перехожу от актеров Scala в Akka, однако я больше не могу найти этих легких актеров!

С Аккой мне нужно не только создать ActorSystem/реквизиты для создания актера, но и позаботиться о жизненном цикле ActorSystem.

Есть ли Акк Актер, который не требует сложного управления жизненным циклом ActorSystem?

ответ

5

Вы можете создать свой собственный по умолчанию ActorSystem в глобальном одиночном объекте, и вам не нужно останавливать его вручную - он остановится при выключениях программы.

UPD

answer Смотрите по Roland Kuhn для решения, как предотвратить ActorSystem от поддержания виртуальной машины Java от закрытия.

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

Для этой цели вы можете использовать package object.

Вы также можете использовать ActorDSL для облегченного синтаксиса создания актера:

import ActorDSL._ 
import global._ 

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

Актеров являются активными лицами обработки, поэтому они должны закрыться, когда больше не нужно. Вы можете сделать жизненный цикл ActorSystem неявным, установив akka.daemonic=on, а это означает, что он не будет блокировать JVM, но это также означает, что ваша работа заключается в обеспечении того, чтобы актеры выполняли свою работу, когда ваша основная программа возвращается.

+0

Благодарим за дополнительную информацию! –