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
アクターシステムをリモートで実行すると、最初のログ行の1つが、実行されたアドレスの情報です。あなたはそれをチェックしたいかもしれません。 – Horusiath
あなたはこれを参照していますか? [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] –
あなたのリモート設定に 'public-hostname = xxx.australiasoutheast.cloudapp.azure.com'を追加するとどうなりますか? – Evk