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/