Akka在谷歌云虚拟机上远程处理



我是Akka的新手,我正在尝试运行一个简单的远程处理actor,它在谷歌云虚拟机实例的localhost上工作。

VM同时具有内部和外部IP。当我启动一个IP设置为外部的演员时,它无法启动。

但是当我做的时候

netty.tcp {
  hostname = "<internal IP>"
  port = 45000

一切开始都很好。

现在很明显,当试图从另一台机器连接时,内部IP无法解析,所以我试图使用以下命令找到参与者:

context.actorSelection("akka.tcp://Main@<external IP>:45000/user/app")

并得到以下错误:

[错误]正在删除非本地收件人[actor[akka.ActorSelectionMessage]的消息[class akka.actor.ActorSelectionMessage。tcp://Main@外部IP: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

相关内容

  • 没有找到相关文章

最新更新