我的用例非常简单 - 在两个对象之间交换少量(< 100)消息,Scala actor非常适合此目的(重量轻,没有复杂的生命周期管理,随时启动/终止)。
现在我从Scala Actors迁移到Akka,但我再也找不到那些轻量级的演员!
使用Akka,我不仅需要为Actor创建创建ActorSystem / Props,还需要关注ActorSystem的生命周期。
是否有一个不需要复杂的ActorSystem生命周期管理的Akka Actor?
答案 0 :(得分:7)
您可以在全局单例对象中创建自己的默认ActorSystem
,而不必手动停止它 - 它将在程序关闭时停止。
<强> UPD 强>
有关如何防止ActorSystem
阻止JVM关闭的解决方案,请参阅answer Roland Kuhn。
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 => ...
}
})
答案 1 :(得分:5)
演员是活跃的处理实体,因此他们需要在不再需要时关闭。您可以通过设置akka.daemonic=on
来隐含ActorSystem的生命周期,这意味着它不会阻止JVM关闭,但这也意味着确保演员在主要工作时完成工作是您的工作。程序返回。