public static async Task StartAsync <TStartup>(CancellationToken cancellationToken)
            where TStartup : MicroserviceStartup, new()
        {
            actorSystem = StartInternal <TStartup>();
            cluster     = Akka.Cluster.Cluster.Get(actorSystem);

            cluster.RegisterOnMemberUp(() =>
            {
                IsClustered = true;
            });

            cluster.RegisterOnMemberRemoved(() =>
            {
                if (IsClustered)
                {
                    IsClustered = false;
                    ClusterLeaveEvent.Set();
                }
            });

            await Task.Delay(TimeSpan.FromMilliseconds(-1), cancellationToken);

            if (IsClustered)
            {
                cluster.Leave(cluster.SelfAddress);

                if (!ClusterLeaveEvent.WaitHandle.WaitOne(10.Seconds()))
                {
                    cluster.Down(cluster.SelfAddress);
                }
            }

            await actorSystem.Terminate();
        }
Пример #2
0
        protected override void PreStart()
        {
            var self = Self;

            _cluster.RegisterOnMemberUp(() => { self.Tell(new LivenessStatus(true)); });

            _cluster.RegisterOnMemberRemoved(() => { self.Tell(new LivenessStatus(false)); });
        }
Пример #3
0
        public override Task StartAsync(CancellationToken cancellationToken)
        {
            cluster = Akka.Cluster.Cluster.Get(actorSystem);

            cluster.RegisterOnMemberUp(RegisterOnMemberUp);

            cluster.RegisterOnMemberRemoved(RegisterOnMemberRemoved);

            return(base.StartAsync(cancellationToken));
        }
Пример #4
0
        public override async Task StartAsync(CancellationToken cancellationToken)
        {

            cluster = Akka.Cluster.Cluster.Get(ActorSystem);

            cluster.RegisterOnMemberUp(RegisterOnMemberUp);

            cluster.RegisterOnMemberRemoved(RegisterOnMemberRemoved);
            ClusterDiscovery.Get(ActorSystem);
           

            await ClusterDiscovery.JoinAsync(ActorSystem);
           
        }
Пример #5
0
        public override Task StartAsync(CancellationToken cancellationToken)
        {
            cluster = Akka.Cluster.Cluster.Get(this.actorSystem);

            cluster.RegisterOnMemberUp(() => {
                clientserviceref = actorSystem.ActorOf(Props.Create(() => new ClientService(IPAddress.Parse("127.0.0.1"), 9001)), "echo-client");

                actorSystem.Scheduler.Advanced.ScheduleRepeatedly(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), () =>
                {
                    clientserviceref.Tell(new SendMessage($"{DateTime.Now.ToString()}--{Guid.NewGuid().ToString("N")}\n"));
                });
            });

            cluster.RegisterOnMemberRemoved(() =>
            {
                clientserviceref.Tell(StopMessage.Instance);
            });


            return(base.StartAsync(cancellationToken));
        }
Пример #6
0
        public override Task StartAsync(CancellationToken cancellationToken)
        {
            cluster = Akka.Cluster.Cluster.Get(this.actorSystem);

            cluster.RegisterOnMemberUp(() => {
                listenerechoserice = actorSystem.ActorOf(Props.Create(() => new EchoService(new IPEndPoint(IPAddress.Any, 9001))), "echo-service");
            });

            cluster.RegisterOnMemberRemoved(() => {
                listenerechoserice.Ask(EchoService.StopServer.Instance)
                .ContinueWith(t =>
                {
                    if (t.IsCompletedSuccessfully)
                    {
                        Console.WriteLine($"服务已停止:{t.Result}");
                    }
                }).ConfigureAwait(false);
            });


            return(base.StartAsync(cancellationToken));
        }
Пример #7
0
        public virtual void Stop()
        {
            _cluster?.RegisterOnMemberRemoved(MemberRemoved);

            _cluster?.Leave(_cluster.SelfAddress);
        }