2015-06-26 1 views
2

Я новичок в Akka, и я пытаюсь запустить простой удаленный актер, который работает на локальном хосте на виртуальном экземпляре Google Cloud VM.Акка удаленно на Google Cloud VM

VM имеет как внутренние, так и внешние IP-адреса. Когда я запускаю актера с установленным IP внешним, он не запускается.

Но когда я делаю это

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

Все, что начинается хорошо.

Теперь, очевидно, при попытке подключиться с другого компьютера внутренний IP не решает, так что я пытаюсь найти актера, используя следующую команду:

context.actorSelection("akka.tcp://[email protected]<external IP>:45000/user/app") 

И получить следующее сообщение об ошибке:

[ERROR] dropping message [класс akka.actor.ActorSelectionMessage] для нелокального адресата [Actor [akka.tcp: // Main @внешний IP: 45000 /]], прибывающий в [akka.tcp: // Main @Внешние IP-адреса: 45000] - это [akka.tcp: // Main @внутренний IP: 45000]

Последняя часть имеет смысл, но как я могу заставить все это работать?

ответ

2

Найдено решение.

Он основан на bind-hostname настройки конфигурации доступны в наступающем 2.4 версии:

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, если необходимо.