在羣集環境中,我有一個種子節點和node1和node2。Akka.net:訪問羣集中的遠程參與者
從節點1我想發送一條消息給在node2上創建的Actor。節點2上此節點的本地路徑是akka:MyAkkaSystem/user/AnActor。
現在我想用這樣的ActorSelection從一個演員從節點1發送消息到這個特定的演員:
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();
不幸的是,由於嘗試以死信結束,因此這不起作用。
Node2上HOCON配置看起來像這樣:
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]
}
}
由於我使用的燈塔種子節點。從連接的角度來看,一切似乎都行得通。種子已經找到並且每個節點都收到歡迎消息。
我以爲我在羣集上擁有位置透明性,並且可以像遠程資源那樣訪問本地。
非常感謝。但是,我認爲節點由於羣集閒話而相互連接。所以如果節點連接,爲什麼我不能直接解決它們? –
你是直接指什麼?在第一段中我描述了直接訪問節點上的actor。 – Horusiath
好吧,看起來好像你必須通過查詢集羣,單例,分片,pub/sub等(這是很棒的功能)來遠程演員。但是因爲節點已經連接起來了,所以說沒有更簡單的方法:ActorSelection([節點的角色]/[到actor的路徑])或者使用客戶端的一些漂亮的HOCON魔術變得透明。 –