繁体   English   中英

Akka Remoting:连接被拒绝:“告诉”方法中没有更多信息

[英]Akka Remoting: Connection refused: no further information in “tell” method

我之前遇到了同样的问题:“ 在Akka 2.0 RC2中使用远程actor部署时出错

您是如何解决的? 我正在使用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");

问候,何塞

我发现,如果您要在同一台计算机上访问远程角色,则必须在远程角色的配置和角色用户中的角色声明中都使用本地地址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")

对于初学者,您应该阅读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 ,而不是默认的LocalActorRefProvider 如果在发送方方面没有此功能,那么事情将无法进行。 您还将看到已经设置了Netty绑定信息,这在接收Actor方面非常重要,这样ActorSystem侦听远程连接和消息。 如果您按照文档中的步骤操作,并以ActorSystem("KSystem")启动接收方Actor系统,那么一切对您都应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM