我写这篇文章是作为 PlayFramework 的后续行动——在另一个本地 ActorSystem 中查找演员,但这次专门针对 Akka 人群提出了这个问题。
问题很简单:在同一主机上部署两个 ActorSystem 是否有意义(不仅在同一主机上,甚至在同一 JVM 上),因为似乎无法通过 system.actorSelection 简单地查找另一个系统除非你远程到本地主机?
换句话说,由于 system1.actorSelection("akka://system2/user/my-actor") 不起作用,但是 system1.actorSelection("akka.tcp://system2@127.0.0.1:2552/user/my -actor") 确实如此,为什么还要考虑部署两个系统?
我怀疑你会问一个用例,所以这里有一个给你。假设我有一个使用 Akka 的复杂实时系统,并且该系统作为自治代理部署在任意数量的机器上。理想情况下,我希望对分配给该系统的资源进行细粒度控制,并且我希望它在某种程度上是孤立的。此外,假设我想编写一个小型控制接口(例如,一个 REST API),其特定目的是提供输入和监控实时系统。自然地,我会让那个控制系统成为另一个与第一个系统交互的 ActorSystem。这是有道理的,对吧?我不希望演员在与实时处理相同的 ActorSystem 中运行(为了隔离、实用、单独的日志记录、不污染资源监控,监督——这将在层次结构中增加一个分支——等等)。该控制 ActorSystem 永远不会部署在单独的机器上,因为它与实时系统密切相关。然而,这两个系统进行通信的唯一方法是通过环回 tcp。
我的建议不是正确/有意的做事方式吗?我错过了什么吗?有没有我没有考虑过的方法?我的用例是否甚至需要使用 Akka?
提前感谢您的意见!