Akka中有轻量级的Actor吗?

5
我的使用情况非常简单 - 在两个对象之间交换少量 (< 100) 消息,Scala actors 对于此目的非常出色(轻量级,无复杂的生命周期管理,随时启动/终止)。
现在我正在从 Scala Actors 迁移到 Akka,但是我再也找不到那些轻量级的 Actors 了!
使用 Akka,我不仅需要创建 ActorSystem/Props 来创建 Actor,还需要注意 ActorSystem 的生命周期管理。
是否存在一种 Akka Actor,它不需要复杂的 ActorSystem 生命周期管理?
2个回答

7
你可以在全局单例对象中创建自己的默认ActorSystem,无需手动停止它 - 它会在程序关闭时停止。 更新 请查看答案,由Roland Kuhn提供解决方案,以防止ActorSystem阻止JVM关闭。
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来使用轻量级的actor创建语法:
import ActorDSL._
import global._

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

5

演员是主动的处理实体,因此当不再需要它们时,它们需要关闭。您可以通过设置akka.daemonic = on使ActorSystem的生命周期变得隐式,这意味着它不会阻止JVM关闭,但这也意味着您需要确保演员在主程序返回时完成了它们的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接