1

我之前遇到过同样的问题:“ Getting errors with remote actor deployment in Akka 2.0 RC2

你是怎么解决的?我正在使用 Akka 2.1.2,但我认为我的问题是概念。

我创建了演员:

ActorRef actorOf = system.actorOf(new Props(HelloWorld.class), "injbct");

然后在其他jvm中我尝试查找它:

ActorRef actorFor = system.actorFor("akka://KSystem@127.0.0.1:2552/user/injbct");

问候,何塞

4

2 回答 2

0

我发现,如果您在同一台机器上访问远程参与者,则必须在远程参与者的配置和参与者用户中的参与者声明中都使用 127.0.0.1 的本地主机地址或机器的实际 IP 地址,即他们不能混用。

远程演员配置

remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      port = 2554

考虑机器的 IP 地址为 1.2.3.4,那么

这有效

val workerRouter = 
    context.actorFor("akka://PrimeWorkerKernel@127.0.0.1:2554/user/PrimeWorkerActor")

这不会并导致连接被拒绝

val workerRouter = 
    context.actorFor("akka://PrimeWorkerKernel@1.2.3.4:2554/user/PrimeWorkerActor")
于 2013-05-17T13:06:50.493 回答
-1

对于初学者,您应该阅读Akka Remoting 文档。然后,确保您的 pom 文件中有远程处理依赖项:

<dependency>
  <groupId>com.typesafe.akka</groupId>
  <artifactId>akka-remote_2.10</artifactId>
  <version>2.1.4</version>
</dependency>

然后,双方(调用方和接收方将需要在其application.conf文件中包含远程配置,类似于远程处理文档中的示例:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      port = 2552
    }
  }
}

您会注意到,actor ref 提供程序已设置为 ,RemoteActorRefProvider而不是 default LocalActorRefProvider。在发送演员方面没有这个,事情将无法正常工作。您还将看到 netty 绑定信息已设置,这在接收参与者方面非常重要,因此它ActorSystem正在侦听远程连接和消息。如果您按照文档中的步骤启动接收参与者系统,ActorSystem("KSystem")那么一切都应该适合您。

于 2013-05-17T00:43:24.013 回答