2017-06-29 3 views
1

Ich versuche, Akka Actors auf einem Remote-Host zu erstellen. Nach der offiziellen Dokumentation erstelle ich ein Remote Actor System, das die Datei application.config analysiert und dann einen neuen Akteur erstellt. Dies ist mein Code:Akka - Erstellen von Remote-Schauspielern

public static void main(String[] args) { 

    Config config = ConfigFactory.parseFile(new File("application.conf")); 
    ActorSystem system = ActorSystem.create("system",config); 
    ActorRef actor = system.actorOf(Props.create(SampleActor.class), "sampleActor"); 
    System.out.println(actor.path()); 
    actor.tell("Hello", ActorRef.noSender()); 
} 

Und das ist, wie ich die application.conf-Datei:

akka {Schauspieler { provider = Remote} {Fern enabled-Transporte = [“ akka.remote.netty.tcp "] netty.tcp { hostname = "shielded-atoll-29637.herokuapp.com" port = 2552 }}}

Weitere Informationen:

  • Akka Protokoll standardmäßig von Akka
  • shielded-atoll-29637.herokuapp.com ist die Standard-Domäne von meinem Server gehostet auf Heroku vorgesehen ist.

Der Punkt ist: sollte ich einen anderen Server oder Heroku ist ausreichend? Falls Heroku in Ordnung ist, sollte ich eine Serveranwendung schreiben, die auf dem Port 2552 nach eingehenden Akteur-erzeugenden Anfragen lauscht? Weil die Dokumentation überhaupt nichts erwähnt.

Vielen Dank im Voraus, Giacomo

Antwort

0

man bedenkt, dass ich eine IP-oder Domain-Namen und den Port auf der Firewall müssen offen sein sollte Ich denke, Akka nicht die beste Lösung ist es, ein System verteilen auf mobilen Geräten zu erstellen. Das ist zum Beispiel gut in einer Firma, die Server in ihrem Netzwerk mit statischer IP und konfigurierbaren Firewalls hat.

0

Während Sie Akteure auf einer entfernten ActorSystem starten können, müssen Sie bereits ActorSystem mit dem gesamten Code bereitgestellt haben, den Sie auslösen möchten. Dies wird normalerweise von verschiedenen Knoten verwendet, die alle Teil desselben Clusters sind. Deine Situation scheint ein wenig anders zu sein.

Ich glaube nicht, dass die Bereitstellung von Akka auf Heroku funktioniert: wenn ich mich richtig erinnere, ist Heroku stark HTTP-zentriert, also bezweifle ich, dass es Ihre Akka-basierte Anwendung korrekt startet, wenn eine Verbindung besteht hergestellt an Port 2552.

Es könnte sinnvoller sein, den Servercode auf Heroku zu implementieren, und der Trigger ist HTTP. Auf diese Weise spielen Sie besser mit Heroku zusammen und die Implementierung kann immer noch entweder Akka-basiert (mit akka-http) oder etwas völlig anderes sein.

Denken Sie daran, dass Heroku möchte, dass Sie lang laufende Prozesse auf Worker-Nodes auslagern, also hängt es wirklich davon ab, was Sie versuchen zu tun, ob das eine gute Lösung ist.

+0

Ich habe meine Meinung geändert und ich gehe zu einer anderen Lösung für die Nachrichtenweiterleitung auf mobilen Geräten: PubNub-Bibliothek. –

0

Sie können Heroku Private Spaces verwenden, um ein Dyno mit den Akteuren zu konfigurieren und bereitzustellen, die Sie remote verwenden möchten. Da Sie die IP-Adresse eines anderen Dyno nicht kennen, sollten Sie Private Spaces DNS Service Discovery verwenden, um mit Hostnamen zu arbeiten. Der Server-Dyno sollte unter Verwendung dieses Host-Namens binden, und der Client-Dyno sollte diesen Host-Namen verwenden, um die Verbindung herzustellen.

Verwandte Themen