初始化具有相同名称的akka​​ actor系统

时间:2013-12-26 16:49:19

标签: akka typesafe-stack

我是akka演员系统的新手。我对演员系统的命名方式感到有些困惑。如果我写

ActorSystem _system1 = ActorSystem.create("multi");
ActorSystem _system2 = ActorSystem.create("multi");
ActorSystem _system3 = ActorSystem.create("multi");

背景会发生什么? JVM中是否有3个不同的actor系统实例?如果是,那么如何通过远程处理访问属于这些演员系统的演员呢?

2 个答案:

答案 0 :(得分:0)

是的,在单个JVM中包含3个不同的ActorSystem是可能的(尽管可能不建议)。我说"不建议"因为actor系统是重量级资源(线程池等...)并且在单个JVM中具有多个资源可能会适得其反。

现在,关于远程处理,为了在同一个JVM中运行这三个,你需要为每个actor系统设置一个不同的远程绑定端口(属性akka.remote.netty.tcp.port),否则你最终会与港口冲突问题。如果您正确执行此操作,则应该能够区分不同的actor系统,因为端口包含在路径中。因此,例如,如果您将第一个actor系统绑定到2552,那么远程路径与绑定到名称" foo"在根系统下将是:

akka.tcp://multi@someIpAddress:2552/user/foo

所以它当然可以做你想做的事,但同样,不推荐......

答案 1 :(得分:0)

回答有关使用相同名称的具体问题:它们将是独立的,断开连接的演员系统。

该名称仅用作标签,可由系统之间的trying to access local actors验证。

关于远程处理,如Akka guide states(强调我的):

  

对于同一台机器上的每个actor系统,端口号必须是唯一的,即使actor系统具有不同的名称。这是因为每个actor系统都有自己的网络子系统,用于监听连接和处理消息,以免干扰其他actor系统。

相关问题