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