Является ли это правильным вариантом использования роли Akka?

Я обновляю кластер Akka, где конкретный актер должен запускаться на узле внутри кластера в зависимости от значения конфигурации. Первоначально я рассматривал возможность использования пользовательской роли кластера Akka и провел некоторое исследование, прочитав https://doc.akka.io/docs/akka/current/cluster-usage.html

предлагает этот код:

      void register(Member member) {
        if (member.hasRole("frontend"))
          getContext()
              .actorSelection(member.address() + "/user/frontend")
              .tell(BACKEND_REGISTRATION, getSelf());
      }

So I could use something like : if (member.hasRole("<MY_CUSTOM_ROLE>")) {
    //Start My Actor
}

Запуск актера в зависимости от его роли, по-видимому, не является предполагаемой функцией ролей в Akka classic, поскольку в приведенном выше примере актер не создается. Вместо этого сообщение передается другому актеру на основе пути. Поскольку метод создания не доступен в Akka classic, создание актера на основе роли невозможно для Akka classic?

Akka, набранная для ролей, похоже, обеспечивает ожидаемую функциональность, которую я пытаюсь реализовать:

Из https://doc.akka.io/docs/akka/current/typed/cluster.html :

Member selfMember = Cluster.get(context.getSystem()).selfMember();

if (selfMember.hasRole("backend")) {
  context.spawn(Backend.create(), "back");
} else if (selfMember.hasRole("front")) {
  context.spawn(Frontend.create(), "front");
}

Здесь создается актер Akka, если роль доступна.

Поскольку я использую классические актеры, я рассматриваю возможность добавления переменной среды вместо роли Akka для каждого развертывания в файле .yml, а затем в исходном коде, который запускает все актеры Akka, если переменная среды заполнена для данного начала развертывания. заданный актор, иначе не запускать актор. Является ли это жизнеспособным решением для определения того, какой актор следует запускать на каждом узле в кластере?


person blue-sky    schedule 05.06.2021    source источник


Ответы (1)


В Akka Classic у вас будет что-то вроде

if (member.hasRole("<MY CUSTOM ROLE>")) {
  Props props = ...
  ActorRef ref = context.system().actorOf(props, "special-name") // spawn as a direct child of the ActorSystem
  // or ...
  ActorRef ref = context.actorOf(props, "special-name") // spawn as a child of this actor
}

В Classic вы можете напрямую появиться через ActorSystem.

person Levi Ramsey    schedule 05.06.2021