Akka Remoting:连接被拒绝:“tell”方法中没有进一步的信息

时间:2013-05-15 16:53:25

标签: java akka

我遇到过你以前遇到的同样问题: “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");

此致,José

2 个答案:

答案 0 :(得分:0)

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

远程actor配置

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")

答案 1 :(得分:-1)

对于初学者,您应该阅读Akka Remoting documentation。然后,确保您的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参考提供程序已设置为RemoteActorRefProvider而不是默认LocalActorRefProvider。如果没有这个在派遣演员方面,事情就不会奏效。您还会看到已经设置了网络绑定信息,这在接收方端非常重要,因此ActorSystem正在侦听远程连接和消息。如果您按照文档中的步骤操作并以ActorSystem("KSystem")启动接收演员系统,那么事情应该适合您。

相关问题