1

我写这篇文章是作为 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?

提前感谢您的意见!

4

1 回答 1

1

您可以为每个分支设置一个顶级actor,并在专用调度程序上运行每个分支,而不是拥有两个单独的参与者系统。每个顶级参与者也将有自己的错误内核。拥有 2 个参与者系统通常是有意义的,当它们不相关时,但是当您进行交流时,我不会将它们分开。

于 2013-11-07T08:07:24.793 回答