示例#1
0
        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();
            }
        }
示例#2
0
        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();
        }