背景
我有一个 Akka.NET 集群,其中包含一个 Lighthouse 种子节点和另外两个运行 Actor 系统的节点。当我尝试在我的一个集群节点上进行正常关闭时,我希望看到至少有一个其他节点收到有关节点离开的消息,并且所有集群节点最终都排除了节点列表中的离开节点。
一旦解决了这个问题,我希望我应该能够关闭节点,而其他两个节点不会因为无法连接到关闭的节点而发疯。
我试过的
我现在拥有的是一个包装在 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));
});
}
}
单步执行 Stop 功能时,我看不到任何收到的关于节点离开其他节点的消息。然而,当函数返回时,其他节点开始发出异常。
Akka.NET Gitter 频道的一位用户说:
即使没有我必须说的 TopShelf,我也观察到了同样的事情,在 webhost 终止后使用纯 ASP.NET Core 项目。
问题
我可以添加什么来让其他节点收到关于节点离开的消息?