В кластерной среде у меня есть начальный узел, узел1 и узел2.
Из node1 я хочу отправить сообщение актеру, который был создан на node2. Локальный путь к этому узлу на node2 — akka:MyAkkaSystem/user/AnActor.
Теперь я хочу отправить сообщение от Актера из node1 этому конкретному актеру, используя ActorSelection следующим образом:
var actorSystem = ActorSystem.Create("MyTestSystem");
var c = actorSystem.ActorSelection("/user/ConsoleReceiver");
c.Tell("Hello World");
На node2 актор был создан так:
var actorSystem = ActorSystem.Create("MyTestSystem");
var r = actorSystem.ActorOf(Props.Create<MessageReceiver>(), "ConsoleReceiver");
Console.WriteLine(r.Path);
Console.ReadLine();
actorSystem.Terminate().Wait();
К сожалению, это не сработает, так как попытка заканчивается мертвыми буквами.
Конфигурация HOCON на node2 выглядит так:
akka {
actor {
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
deployment {
}
}
remote {
log-remote-lifecycle-events = DEBUG
log-received-messages = on
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
hostname = "127.0.0.1"
port = 0
}
}
cluster {
#will inject this node as a self-seed node at run-time
seed-nodes = ["akka.tcp://[email protected]:4053"] #manually populate other seed nodes here, i.e. "akka.tcp://[email protected]:4053", "akka.tcp://[email protected]:4044"
roles = [crawler]
}
}
В качестве начального узла я использую маяк. С точки зрения подключения вроде все работает. Семя было найдено, и каждый полученный узел получил приветственное сообщение.
Я думал, что у меня есть прозрачность местоположения в кластере и я могу получить доступ к удаленным ресурсам, как если бы они были локальными.