2017-11-09 14 views
1

Akka.NETでリモート処理を開始する方法を示すデモは、2つのアクターがlocalhostを使用して同じマシンで実行されている最も単純な使用例です。リモートアドレスに接続するためのAkka.NETの取得

私はリモートマシンに接続するためにAkka.NETアクタを取得しようとしており、何か難しかったです。

コードは非常に簡単です:

クライアントコード

var config = ConfigurationFactory.ParseString(@" 
    akka { 
     log-config-on-start = on 
     stdout-loglevel = DEBUG 
     loglevel = DEBUG 
     actor { 
      provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote"" 

      debug { 
       receive = on 
       autoreceive = on 
       lifecycle = on 
       event-stream = on 
       unhandled = on 
      } 

      deployment { 
       /remoteactor { 
        router = round-robin-pool 
        nr-of-instances = 5 
        remote = ""akka.tcp://[email protected]:666"" 
       } 
      } 
     } 
     remote { 
      dot-netty.tcp { 
       port = 0 
       hostname = localhost 
      } 
     } 
    } 
"); 

using (var system = ActorSystem.Create("system1", config)) 
{ 
    Console.ReadLine(); 
} 

サーバコード:私は別の俳優・プロセスを実行したときに

var config = ConfigurationFactory.ParseString(@" 
akka { 
    log-config-on-start = on 
    stdout-loglevel = DEBUG 
    loglevel = DEBUG 
    actor { 
     provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote"" 

     debug { 
      receive = on 
      autoreceive = on 
      lifecycle = on 
      event-stream = on 
      unhandled = on 
     } 
    } 
    remote { 
     dot-netty.tcp { 
      transport-protocol = tcp 
      port = 666 
      hostname = ""10.0.0.4"" //This is the local IP address 
     } 
    } 
} 
"); 

using (ActorSystem.Create("system2", config)) 
{ 
    Console.ReadLine(); 
} 

私は正常に接続することができます私のローカルネットワーク上のマシンですが、同じ簡単な例を配布すると私は次のエラーが表示され、クラウドVM上に:

[ERROR][11/9/2017 3:58:45 PM][Thread 0008][[akka://system2/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fsystem1%40localhost%3A28456-1/endpointWriter#1657012126]] Dropping message [Akka.Remote.DaemonMsgCreate] for non-local recipient [[akka.tcp://[email protected]:666/remote]] arriving at [akka.tcp://[email protected]:666] inbound addresses [akka.tcp://[email protected]:666] 
Cause: Unknown 

私はまた、「127.0.0.1」を使用して試してみましたが、それは、ローカルまたはネット上で動作するようには思えません。

誰かが私が間違っていると思われることについての入力を提供することはできますか?

UPDATE

私はこれは私が苦しんでいます信じているNATの問題を回避することになっているとして、バインド・ホスト名とAkka.NETで利用可能なバインドポートをオプションを使用しようとしました。残念ながら、これはどちらか動作していないよう以下のように、私はそのようなホスト名とIPアドレスを使用するなど、さまざまな設定オプションを試してみました:

remote { 
    dot-netty.tcp {  
     port = 666 
     hostname = "13.73.xx.xx" 

     bind-port = 666 
     bind-hostname = "0.0.0.0" 

    } 
} 

私は上記の設定があるしようとすると、エラーメッセージ:

[ERROR][11/12/2017 5:19:58 AM][Thread 0003][Akka.Remote.Transport.DotNetty.TcpTransport] Failed to bind to 13.73.xx.xx:666; shutting down DotNetty transport. 
Cause: System.AggregateException: One or more errors occurred. ---> System.Net.Sockets.SocketException: The requested address is not valid in its context 
+0

アクターシステムをリモートで実行すると、最初のログ行の1つが、実行されたアドレスの情報です。あなたはそれをチェックしたいかもしれません。 – Horusiath

+0

あなたはこれを参照していますか? [INFO] [11/10/2017 3:22:57 PM] [スレッド0001] [remoting]リモート処理が開始されました。リマイングがアドレスでリッスンする:[akka.tcp://[email protected]:666] [INFO] [11/10/2017 3:22:57 PM] [スレッド0001] [remoting] akka.tcp://[email protected]:666] –

+0

あなたのリモート設定に 'public-hostname = xxx.australiasoutheast.cloudapp.azure.com'を追加するとどうなりますか? – Evk

答えて

1

いくつかの発言:

サーバーの設定では、それが0.0.0.0にバインドしています。 (hostname = 0.0.0.0)この方法では、クラウドホストenvが複数のネットワークエンドポイントを使用する場合に、ソケットはすべてのローカルエンドポイントにバインドされます。 次に、public-hostname = xxx.australiasoutheast.cloudapp.azure.comを設定してください。このようにして、サーバーインスタンスのホスト名は、リモートURLで使用しているリモーティングアドレスと同じになります。

public-hostname(およびpublic-hostnameを使用していない場合はホスト名)はDNSで解決できる必要があります。

+0

あなたは絶対伝説です。どうもありがとうございます。私は完全に立ち往生していたし、何とかドキュメントの中でこれを逃した。関心のある人は、ここで詳細を説明しますhttp://getakka.net/articles/remoting/transports.html。 public-hostname = " xxx.australiasoutheast.cloudapp.azureを追加してください。com "が問題を解決しました。 –

関連する問題