你如何阻止一个远程路由器演员,其主管在Akka.net?

时间:2016-07-01 12:08:28

标签: akka.net

我用这些演员创建了一个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中的错误?

0 个答案:

没有答案