Akka 2.x需要许多命令来引用ActorSystem。因此,要创建一个 Actor MyActor的实例,您可能会说:

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])

由于经常需要ActorSystem,因此许多代码示例都省略了代码的创建,并假定读者知道system变量的来源。

如果您的代码在不同地方产生角色,则可以复制此代码,可能创建其他ActorSystem实例,或者可以尝试通过引用某些全局变量或通过传递ActorSystem来共享同一ActorSystem实例。

Akka文档在“ Actor 系统”标题下提供了general overview of systems of actors,还有documentation of the ActorSystem class。但是,这些都不在很大程度上解释为什么Akka的用户不能仅仅依靠Akka来管理这种后台功能。

问题
  • 每次共享相同的ActorSystem对象或创建一个新的ojit有什么含义?
  • 这里的最佳做法是什么?一直在传递ActorSystem似乎令人费解。
  • 一些示例为ActorSystem命名:ActorSystem("MySystem")其他仅调用ActorSystem()。这有什么区别?如果两次使用相同的名称怎么办?
  • akka-testkit是否要求您与传递给ActorSystem构造函数的代码共享一个共同的TestKit
  • 最佳答案

    创建ActorSystem非常昂贵,因此您希望避免在每次需要时都创建一个新的ActorSystem。而且,除非有充分的理由,您的 Actor 应该在同一ActorSystem中运行。 ActorSystem的名称也是在其中运行的actor的路径的一部分。例如。如果您在名为MySystem的系统中创建一个actor,它将具有类似于akka://MySystem/user/$a的路径。如果您在角色环境中,则始终有对ActorSystem的引用。在Actor中,您可以调用context.system。我不知道akka-testkit会有什么期望,但是您可以看一下akka测试。

    综上所述,除非有充分的理由不这样做,否则您应该始终使用同一系统。

    关于scala - 我需要重新使用相同的Akka ActorSystem还是每次需要一个就创建一个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10396552/

    10-11 17:32