我正试图通过
运行AKKA远程示例1. Running the remote actor in a machine with IP 192.168.1.7
2. Running the local from my machine
远程actor在机器中启动(ip地址为192.168.1.7);但是当我从我的机器启动Local actor时,它无法连接到远程actor。请找到本地和远程actor系统配置:
本地:
akka {
//loglevel = "INFO"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 0
}
//log-sent-messages = on
//log-received-messages = on
}
}
远程:
akka {
//loglevel = "INFO"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 5150
}
//log-sent-messages = on
//log-received-messages = on
}
}
本地系统中用于连接远程actor的代码:
class LocalActor extends Actor {
val remote = context.actorFor("akka.tcp://HelloRemoteSystem@192.168.1.7:5150/user/RemoteActor")
var counter = 0
def receive = {
case "START" =>
remote ! "Hello from the LocalActor"
case msg: String =>
println(s"LocalActor received message: '$msg'")
if (counter < 5) {
sender ! "Hello back to you"
counter += 1
}
}
}
当我启动本地系统时,我收到以下消息:
C:\Users\AnandKrishnan\Documents\GitHub\AkkaRemoteActorsHelloWorld\HelloLocal [master +0 ~5 -0]> sbt run
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Set current project to HelloLocal (in build file:/C:/Users/AnandKrishnan/Documents/GitHub/AkkaRemoteActorsHelloWorld/HelloLocal/)
[info] Compiling 1 Scala source to C:\Users\AnandKrishnan\Documents\GitHub\AkkaRemoteActorsHelloWorld\HelloLocal\target\scala-2.11\classes...
[warn] there was one deprecation warning; re-run with -deprecation for details
[warn] one warning found
[info] Running local.Local
[INFO] [02/14/2016 22:57:11.755] [run-main-0] [Remoting] Starting remoting
[INFO] [02/14/2016 22:57:12.163] [run-main-0] [Remoting] Remoting started; listening on addresses :[akka.tcp://LocalSystem@127.0.0.1:50830]
[INFO] [02/14/2016 22:57:12.163] [run-main-0] [Remoting] Remoting now listens on addresses: [akka.tcp://LocalSystem@127.0.0.1:50830]
[WARN] [02/14/2016 22:57:13.351] [LocalSystem-akka.remote.default-remote-dispatcher-5] [akka.tcp://LocalSystem@127.0.0.1:50830/system/endpointManager/reliableEndpointWriter-akka.tcp
%3A%2F%2FHelloRemoteSystem%40192.168.1.7%3A5150-0/endpointWriter] AssociationError [akka.tcp://LocalSystem@127.0.0.1:50830] -> [akka.tcp://HelloRemoteSystem@192.168.1.7:5150]: Error
[Invalid address: akka.tcp://HelloRemoteSystem@192.168.1.7:5150] [
akka.remote.InvalidAssociation: Invalid address: akka.tcp://HelloRemoteSystem@192.168.1.7:5150
Caused by: akka.remote.transport.Transport$InvalidAssociationException: Connection refused: no further information: /192.168.1.7:5150
]
[WARN] [02/14/2016 22:57:13.371] [LocalSystem-akka.remote.default-remote-dispatcher-6] [Remoting] Tried to associate with unreachable remote address [akka.tcp://HelloRemoteSystem@192.168.1.7:5150]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: Connection refused: no further information: /192.168.1.7:5150
[INFO] [02/14/2016 22:57:13.389] [LocalSystem-akka.actor.default-dispatcher-3] [akka://LocalSystem/deadLetters] Message [java.lang.String] from Actor[akka://LocalSystem/user/LocalActor#1441959988] to Actor[akka://LocalSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
答案 0 :(得分:1)
在远程Actor Actor类中,你有:
val system = ActorSystem("HelloRemoteSystem", config)
确保在使用actorSelection
/ actorFor
时在本地演员中使用相同名称,如:
val remoteActor = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:2553/user/RemoteActor")
答案 1 :(得分:0)
为了让Akka actor系统与其他主机通信,actor系统必须绑定到可由其他主机路由的主机名或IP。 localhost
当然不是。
您的远程系统需要绑定到192.168.1.7:
akka {
remote {
netty.tcp {
hostname = "192.168.1.7"
}
}
}
当然,在制作中你可能想要使用主机名而不是IP。