Akka有轻量级演员吗?

时间:2013-08-08 06:33:51

标签: scala akka

我的用例非常简单 - 在两个对象之间交换少量(< 100)消息,Scala actor非常适合此目的(重量轻,没有复杂的生命周期管理,随时启动/终止)。

现在我从Scala Actors迁移到Akka,但我再也找不到那些轻量级的演员!

使用Akka,我不仅需要为Actor创建创建ActorSystem / Props,还需要关注ActorSystem的生命周期。

是否有一个不需要复杂的ActorSystem生命周期管理的Akka Actor?

2 个答案:

答案 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关闭,但这也意味着确保演员在主要工作时完成工作是您的工作。程序返回。