В кластерной среде у меня есть начальный узел и node1 и node2.Akka.net: Доступ к удаленным актерам в кластере
От узла1 Я хочу отправить сообщение Актеру, созданному на узле2. Локальный путь к этому узлу на узле2 - это 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]
}
}
Как узел семян я использую маяк. С точки зрения подключения все, кажется, работает. Семя найдено, и каждый полученный узел получил приветственное сообщение.
Я думал, что у меня есть прозрачность местоположения в кластере и может достигать удаленных ресурсов, как если бы они были локальными.
Хорошо спасибо. Однако я думал, что узлы связаны друг с другом из-за кластерных сплетен. Итак, если узлы связаны, почему я не могу обратиться к ним напрямую? –
Что вы подразумеваете под этим? В первом абзаце я описал прямой доступ к актеру на узле. – Horusiath
Ну, похоже, вам пришлось пройти долгий путь, чтобы добраться до удаленных участников, запросив кластер, синглтон, осколки, паб/суб и т. Д. (Которые являются отличными функциями). Но поскольку узлы подключены уже, нет более простого способа, говоря: ActorSelection ([роль узла]/[путь к актеру]) или сделать его прозрачным с некоторой изящной магией HOCON на стороне клиента? –