Akka - 在同一主机上部署两个ActorSystems

时间:2013-11-07 07:30:12

标签: scala akka

我写这篇文章是PlayFramework -- Look up actors in another local ActorSystem的后续文章,但这一次是专门针对Akka人群的问题。

问题很简单:在同一主机上部署两个ActorSystems是有意义的(不只是在同一个主机上,甚至在同一个JVM上),因为似乎没有办法简单地通过查找其他系统system.actorSelection除非你远程到localhost?

换句话说,因为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永远不会部署在单独的机器上,因为它与实时系统齐头并进。然而,这两个系统进行通信的唯一方法是通过loopback tcp。

我所建议的不是正确/预期的做事方式吗?我错过了什么吗?有没有办法做到这一点,我没有考虑过?我的用例是否甚至要求使用Akka?

提前感谢您的意见!

1 个答案:

答案 0 :(得分:1)

您可以为每个分支设置一个顶级actor,而不是拥有两个独立的actor系统,并在专用调度程序上运行每个分支。每个顶级actor都有自己的错误内核。拥有2个演员系统大多是有意义的,当它们不相关时,但是当你的沟通时,我不会将它们分开。