Как остановить актера удаленного маршрутизатора, руководитель которого является локальным в Akka.net?

Я создал систему актеров Akka.net с этими актерами

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, и Супервизор получает сообщение "Прекращено" для WorkerRouter. Затем я могу воссоздать WorkerRouter.

  • Если я добавлю приведенную ниже конфигурацию HOCON для удаленного развертывания Supervisor (и WorkerRouter), то поведение будет таким же, как указано выше и ожидается:

        deployment {
          /Supervisor {
            remote = "akka.tcp://ActorSystem@127.0.0.1:8091"
          }
    
  • Однако мое первоначальное намерение состояло в том, чтобы сохранить Supervisor локальным и развернуть WorkerRouter удаленно. С приведенной ниже конфигурацией поведение не такое, как я ожидаю - WorkerActors по-прежнему завершают работу, но Supervisor больше не получает сообщение Ter прекращено для WorkerRouter, и поэтому я не могу воссоздать WorkerRouter (попытки сделать это приводят к InvalidActorNameException, потому что субъект не завершено, и имя все еще используется):

        deployment {
          /Supervisor/WorkerRouter {
            remote = "akka.tcp://ActorSystem@127.0.0.1:8091"
          }
    

Это дизайн или ошибка в Akka.net?

0 ответов

Другие вопросы по тегам