У меня есть кластер Akka.NET, содержащий семя Маяка node и два других узла, на которых действуют актерские системы. Когда я пытаюсь сделать изящное завершение работы на одном из моих узлов кластера, я хочу видеть, что хотя бы один из других узлов видит сообщение об уходе node и что все узлы кластера в конечном итоге исключают уход node список узлов.
После того, как я позаботился о том, что я ожидаю, что мне удастся отключить систему актеров, если два других узла не сойдут с ума по поводу невозможности подключиться к node, который выключится...
Теперь у меня есть консольное приложение, заключенное в приложение TopShelf:
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();
}
}
Вот моя главная:
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));
});
}
}
Когда вы переходите через функцию "Стоп", я не вижу ни одного принятого сообщения о node, оставшегося на других узлах. Однако, когда функция возвращает, другие узлы начинают исключать извержения.
Пользователь в канале Gitter Akka.NET сказал:
Я наблюдал то же самое даже без TopShelf, я должен сказать, с чистым Проект ASP.NET Core после завершения веб-хостинга.