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(); }
protected override void PreStart() { var self = Self; _cluster.RegisterOnMemberUp(() => { self.Tell(new LivenessStatus(true)); }); _cluster.RegisterOnMemberRemoved(() => { self.Tell(new LivenessStatus(false)); }); }
public override Task StartAsync(CancellationToken cancellationToken) { cluster = Akka.Cluster.Cluster.Get(actorSystem); cluster.RegisterOnMemberUp(RegisterOnMemberUp); cluster.RegisterOnMemberRemoved(RegisterOnMemberRemoved); return(base.StartAsync(cancellationToken)); }
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); }
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)); }
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)); }
public virtual void Stop() { _cluster?.RegisterOnMemberRemoved(MemberRemoved); _cluster?.Leave(_cluster.SelfAddress); }