Ich habe einen Akka.NET-Cluster mit einem Lighthouse Seed-Knoten und zwei anderen Knoten, die Actor-Systeme ausführen. Wenn ich versuche, ein ordnungsgemäßes Herunterfahren auf einem meiner Clusterknoten durchzuführen, möchte ich sehen, dass mindestens einer der anderen Knoten eine Nachricht über den ausgehenden Knoten anzeigt und dass alle Clusterknoten schließlich den ausgehenden Knoten der Knotenliste ausschließen.Akka.NET-Cluster-Knoten ordnungsgemäß Herunterfahren
Sobald das erledigt worden erwarte ich sollte ich der Schauspieler System ohne die beiden anderen Knoten gehen Nüsse über nicht in der Lage ist mit dem Knoten zu verbinden, die nach unten zur Abschaltung der Lage sein, schließen ...
Was ich habe, jetzt eine Konsole-Anwendung in einer Topshelf Anwendung eingewickelt:
class ActorService : ServiceControl
{
private ActorSystem _actorSystem;
public bool Start(HostControl hostControl)
{
_actorSystem = ActorSystem.Create("myActorSystem");
var cluster = Cluster.Get(_actorSystem);
cluster.RegisterOnMemberRemoved(_Terminate);
return true;
}
public bool Stop(HostControl hostControl)
{
var cluster = Cluster.Get(_actorSystem);
cluster.Leave(cluster.SelfAddress);
return true;
}
private void _Terminate()
{
_actorSystem.Terminate();
}
}
Hier ist meine Haupt:
class Program
{
static int Main(string[] args)
{
return (int) HostFactory.Run(x =>
{
x.UseAssemblyInfoForServiceInfo();
x.RunAsLocalSystem();
x.StartAutomatically();
x.Service<ActorService>();
x.EnableServiceRecovery(r => r.RestartService(1));
});
}
}
Wenn durch die Stop-Funktion treten, Ich kann keine empfangene Nachricht über den Knoten auf den anderen Knoten sehen. Wenn die Funktion jedoch zurückkehrt, beginnen die anderen Knoten mit dem Auslösen von Ausnahmen.
Ein Benutzer in der Akka.NET Gitter Kanal sagte:
ich die gleiche Sache beobachtet haben, auch ohne Topshelf I, mit einem reinen ASP.NET Core-Projekt beendet nach dem Webhost sagen muss.
Könnten Sie bitte die Ausnahmen, die Sie auf den anderen Knoten sehen, posten? – Aaronontheweb
Da ich diese mit ASP.NET Core Webhost habe, kann ich diese Ausnahmen sehen: Beginnt mit 'Error gefangen Kanal' mit 'System.Net.Sockets.SocketException (0x80004005): Die E/A-Operation wurde abgebrochen, weil entweder eines Thread-Exits oder einer Anwendungsanfrage. Dann wurden zwei tote Briefe, die "Dissociated" Nachrichten haben, nicht geliefert. Dann 'AkkA.Remote.ShutDownAssociation: Adresse herunterfahren mit' AkkA.Remote.Transport.InvalidAssociationException: Das entfernte System hat die Verbindung beendet, weil es heruntergefahren wird.' Gefolgt von weiteren toten Buchstaben. – ZoolWay
Es wird weiterhin "InvalidAssociation" erzeugt, weil es dann endlos versucht, sich wieder mit dem Herunterfahrknoten zu verbinden, der den Cluster hätte verlassen sollen. – ZoolWay