0
我試圖創建一個示例,創建一個能夠處理訂單和發送訂單的客戶端的集羣。Akka.Net ClusterClientReceptionist多節點故障
爲此,我使用ClusterClientReceptionist和ClusterClient在客戶端和集羣網絡之間進行通信。
羣集節點的代碼:
namespace ClusterNode
{
class Program
{
static void Main(string[] args)
{
bool isFirst = false;
using (var mutex = new Mutex(false, "5D14E338-616C-4637-93E7-E59D152DC005", out isFirst))
{
using (var system = ActorSystem.Create(nameof(Order), CreateConfig(isFirst)))
{
var receptionistConfig = ClusterClientReceptionist.DefaultConfig();
system.Settings.InjectTopLevelFallback(receptionistConfig);
ClusterRouterPoolSettings settings = new ClusterRouterPoolSettings(int.MaxValue, 1, true);
ClusterRouterPool pool = new ClusterRouterPool(new Akka.Routing.RoundRobinPool(1), settings);
var aref = system.ActorOf(pool.Props(Props.Create<OrderProcessor>()), nameof(OrderProcessor));
var receptionist = ClusterClientReceptionist.Get(system);
receptionist.RegisterService(aref);
system.WhenTerminated.Wait();
}
}
}
private static Config CreateConfig(bool isFirst)
{
var configString = "akka { actor.provider = \"Akka.Cluster.ClusterActorRefProvider, Akka.Cluster\"\n";
var port = (isFirst) ? 8082 : 0;
configString += "remote { helios.tcp { hostname = localhost, port = " + port + " } }\n";
configString += "cluster {\n seed-nodes = [\"akka.tcp://" + nameof(Order) + "@localhost:8082\"] \n";
configString += "}\n";
configString += "}";
var config = ConfigurationFactory.ParseString(configString);
return config;
}
}
}
客戶端代碼:
namespace Client
{
class Program
{
static void Main(string[] args)
{
using (var system = ActorSystem.Create(nameof(Client), CreateConfig()))
{
system.Settings.InjectTopLevelFallback(ClusterClientReceptionist.DefaultConfig());
var client = system.ActorOf(ClusterClient.Props(ClusterClientSettings.Create(system)));
bool quit = false;
while (!quit)
{
var str = Console.ReadLine();
if (string.Equals(str, "QUIT", StringComparison.InvariantCultureIgnoreCase))
{
quit = true;
continue;
}
Order order = new Order() { Msg = str };
var respTask = client.Ask<Response>(new ClusterClient.Send("/user/OrderProcessor", order));
respTask.Wait();
Console.WriteLine(respTask.Result.ResponseMsg);
}
system.Terminate();
system.WhenTerminated.Wait();
}
}
private static Config CreateConfig()
{
var configString = "akka { actor.provider = \"Akka.Remote.RemoteActorRefProvider, Akka.Remote\"\n";
configString += "remote { helios.tcp { hostname = localhost, port = 0 } }\n";
configString += "cluster {\n seed-nodes = [\"akka.tcp://" + nameof(Order) + "@localhost:8082\"], ";
configString += " client { initial-contacts : [ \"akka.tcp://" + nameof(Order) + "@localhost:8082/system/receptionist\" ] }";
configString += " }\n";
configString += "}";
var config = ConfigurationFactory.ParseString(configString);
return config;
}
}
}
在i創建一個羣集節點和一個客戶端的樣品工作。 如果我嘗試創建多個羣集節點,它們相互連接,然後直接dissasociate和羣集崩潰。
如果我評論兩個folling行集羣的工作,但機制接待員/客戶端不起作用。
var receptionist = ClusterClientReceptionist.Get(system);
receptionist.RegisterService(aref);
他們的配置是否丟失?
由於使用了很多。順便說一下,它也與Akka.Serialization.Hyperion一起工作。 –