static void Main(string[] args) { ReadEnvironmentVariables(); var seedNodeRepository = new RedisClient(redisConnectionString); var seedNodeManager = new SeedNodeManager("lighthouse", applicationName, internalIpAddress, port, seedNodeRepository); Task seedNodeManagerTask; var cancellationTokenSource = new CancellationTokenSource(); try { var seedNodes = seedNodeManager.RetrieveAllSeedNodes(true); var lighthouseService = new LighthouseService(internalIpAddress, port != null ? (int?)Convert.ToInt32(port): null, seedNodes); lighthouseService.Start(); seedNodeManagerTask = seedNodeManager.StartRegisteringSeedNodeTask(cancellationTokenSource); Console.ReadLine(); lighthouseService.StopAsync().Wait(); } catch (Exception ex) { Console.Error.WriteLine($"Error occurred, {ex}"); } finally { cancellationTokenSource.Cancel(); seedNodeManager.DeregisterSeedNode(); } }
private static void Main(string[] args) { var seedNodeRepository = new RedisClient(Environment.GetEnvironmentVariable("REDISCONNECTIONSTRING")); var seedNodeManager = new SeedNodeManager("lighthouse", seedNodeRepository); Console.WriteLine("version 1.0"); var configString = @"akka { actor { provider = ""Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"" } remote { log-remote-lifecycle-events = DEBUG dot-netty.tcp { hostname = 0.0.0.0 public-hostname=10.0.12.18 port = 0 dns-use-ipv6 = false enforce-ip-family = true } } cluster { seed-nodes = [] split-brain-resolver { # Enable one of the available strategies (see descriptions below): # static-quorum, keep-majority, keep-oldest, keep-referee active-strategy = off # Decision is taken by the strategy when there has been no membership or # reachability changes for this duration, i.e. the cluster state is stable. stable-after = 20s } } }"; var seedNodes = seedNodeManager.RetrieveAllSeedNodes(false).ToList(); seedNodes.ForEach(s => Console.WriteLine($"Seed Address: {s}")); var config = ConfigurationFactory.ParseString(configString); StartUp(config, seedNodes); seedNodeManager.OnSplitClusterDetected((IEnumerable <string> newSeedNodes) => { seedNodes.AddRange(newSeedNodes); Console.Error.WriteLine("Split Cluster Detected"); newSeedNodes.ToList().ForEach(s => Console.WriteLine($"New Seed Node Detected {s}")); }, seedNodes); Console.WriteLine("Press any key to exit"); Console.ReadLine(); }