我用这些演员创建了一个Akka.net actor系统
1)顶级“主管”演员:
_supervisor = _actorSystem.ActorOf(Props.Create<Supervisor>(), "Supervisor");
2)儿童演员'WorkerRouter'被定义为监督'WorkerActors'的循环演员:
_props = Props.Create<WorkerActor>().WithRouter(new RoundRobinPool(3));
_workerRouter = Context.ActorOf(_props, "WorkerRouter");
Context.Watch(_workerRouter);
我在停止WorkerRouter时发现远程部署的行为不一致。
在本地运行时,行为正如我所期望的那样:
Context.Stop(_workerRouter);
这会阻止每个WorkerActors及其PostStop挂钩触发。 DeathWatch启动并且Supervisor收到WorkerRouter的Terminated消息。然后我可以重新创建WorkerRouter。
如果我在下面添加HOCON配置以远程部署Supervisor(和WorkerRouter),行为仍然如上所述并且符合预期:
deployment {
/Supervisor {
remote = "akka.tcp://ActorSystem@127.0.0.1:8091"
}
但是,我的初衷是保持Supervisor本地并远程部署WorkerRouter。使用下面的配置,行为不是我所期望的 - WorkerActors仍然关闭,但Supervisor不再收到WorkerRouter的Terminated消息,因此我无法重新创建WorkerRouter(尝试这样做会导致InvalidActorNameException,因为actor尚未终止,名称仍在使用中):
deployment {
/Supervisor/WorkerRouter {
remote = "akka.tcp://ActorSystem@127.0.0.1:8091"
}
这是设计还是Akka.net中的错误?