我写这篇文章是为了跟进PlayFramework -- Look up actors in another local ActorSystem,但这一次是专门针对Akka人群的问题。
问题很简单:如果不能通过system.actorSelection简单地查找另一个系统,那么在同一台主机上部署两个ActorSystems (不仅在同一台主机上,甚至在同一个JVM上)有意义吗?
换句话说,既然system1.actorSelection("akka://system2/user/my-actor")不能工作,而system1.actorSelection("akka.tcp://system2@127.0.0.1:2552/user/my-actor")能工作,为什么还要考虑部署两个系统呢?
我怀疑你会问一个用例,所以这里有一个适合你的。假设我有一个使用Akka的复杂实时系统,并且这个系统作为自治代理部署在任意数量的机器上。理想情况下,我希望对分配给此系统的资源进行细粒度控制,并且希望它在某种程度上是独立的。此外,假设我想要编写一个小的控制接口(例如,REST API),其特定目的是提供输入和监控实时系统。当然,我会使该控制系统成为与第一个系统交互的另一个ActorSystem。这是有道理的,对吧?我不想让actors运行在与实时处理相同的ActorSystem中(为了隔离、实用性、单独的日志记录、无污染的资源监视、监督--这将在层次结构中增加一个分支--等等)。该控制ActorSystem永远不会部署在单独的机器上,因为它与实时系统齐头并进。然而,这两个系统通信的唯一方式是通过环回tcp。
我所建议的不是正确的/预期的做事方式吗?我是不是遗漏了什么?有没有办法做到这一点,而我没有考虑过?我的用例需要使用Akka吗?
提前感谢您的投入!
发布于 2013-11-07 16:07:25
您可以为每个分支提供一个顶级执行元,并在专用的调度程序上运行每个分支,而不是使用两个独立的执行元系统。每个顶级参与者也将拥有自己的错误内核。有两个参与者系统通常是有意义的,当它们不相关时,但由于您的通信,我不会将它们分开。
https://stackoverflow.com/questions/19830231
复制相似问题