Google 云虚拟机上的 Akka 远程处理
Akka remoting on Google Cloud VM
我是 Akka 的新手,我正在尝试 运行 一个简单的远程处理 actor,它在 Google 云 VM 实例上的本地主机上工作。
VM 具有内部和外部 IP。当我启动一个 IP 设置为外部的 actor 时,它无法启动。
但是当我这样做的时候
netty.tcp {
hostname = "<internal IP>"
port = 45000
一切顺利。
现在很明显,当尝试从另一台机器连接时,内部 IP 无法解析,所以我尝试使用以下命令找到参与者:
context.actorSelection("akka.tcp://Main@<external IP>:45000/user/app")
并得到以下错误:
[错误] 为非本地收件人 [Actor[akka.tcp://Main@ 外部 IP[=32] 丢弃消息 [class akka.actor.ActorSelectionMessage] =]:45000/]] 到达 [akka.tcp://Main@ 外部 IP:45000] 入站地址是 [akka.tcp://Main@内部IP:45000]
最后一部分确实有道理,但我如何才能使整个过程发挥作用?
找到解决方案。
它基于即将推出的 2.4 版本中可用的 bind-hostname
配置设置:
build.sbt
resolvers += "Typesafe Snapshots" at "http://repo.akka.io/snapshots/"
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.4-SNAPSHOT",
"com.typesafe.akka" %% "akka-remote" % "2.4-SNAPSHOT"
)
application.conf
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "external IP"
port = 45000
bind-hostname = "internal IP"
}
}
}
如果需要,您还可以指定 bind-port
。
我是 Akka 的新手,我正在尝试 运行 一个简单的远程处理 actor,它在 Google 云 VM 实例上的本地主机上工作。
VM 具有内部和外部 IP。当我启动一个 IP 设置为外部的 actor 时,它无法启动。
但是当我这样做的时候
netty.tcp {
hostname = "<internal IP>"
port = 45000
一切顺利。
现在很明显,当尝试从另一台机器连接时,内部 IP 无法解析,所以我尝试使用以下命令找到参与者:
context.actorSelection("akka.tcp://Main@<external IP>:45000/user/app")
并得到以下错误:
[错误] 为非本地收件人 [Actor[akka.tcp://Main@ 外部 IP[=32] 丢弃消息 [class akka.actor.ActorSelectionMessage] =]:45000/]] 到达 [akka.tcp://Main@ 外部 IP:45000] 入站地址是 [akka.tcp://Main@内部IP:45000]
最后一部分确实有道理,但我如何才能使整个过程发挥作用?
找到解决方案。
它基于即将推出的 2.4 版本中可用的 bind-hostname
配置设置:
build.sbt
resolvers += "Typesafe Snapshots" at "http://repo.akka.io/snapshots/"
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.4-SNAPSHOT",
"com.typesafe.akka" %% "akka-remote" % "2.4-SNAPSHOT"
)
application.conf
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "external IP"
port = 45000
bind-hostname = "internal IP"
}
}
}
如果需要,您还可以指定 bind-port
。