我遇到过你以前遇到的同样问题: “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é
答案 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")
启动接收演员系统,那么事情应该适合您。