Как мне контролировать исполнение актерской системы в Akka во время выполнения?

Я пытался найти способ управления передачей сообщений во время выполнения в системе акторов с помощью какого-либо внешнего (отдельного от системы акторов) контроллера. Другими словами, с учетом действующей системы (которую я не хочу менять): как мне установить своего рода контроллер, который контролирует передачу сообщений внутри нее?

Например, представьте, что данная система акторов имеет следующую настройку:

object Program extends App {
  val system = ActorSystem("system")
  val B = system.actorOf(Props[B], "B")
  val A = system.actorOf(Props(new A(B)), "A")
  A ! "Start"
  system.terminate()
}
class A(B: ActorRef) extends Actor {
  def receive  = {case "Start" => B ! "Message"}
}
class B extends Actor {
  def receive = {case "Message" => println("Some logic")}
}

Я хочу сделать следующее:

  • Запустите эту программу синхронно, в одном потоке
  • Для каждого сообщения, передаваемого в системе: проверьте содержимое, отправителя и получателя и на основании этого; выполнить некоторую логику.

В приведенном выше примере я хотел бы "контроллер", который будет делать что-то вроде:

  1. Актер А получил сообщение "Старт" извне и отправил "Сообщение" Актеру Б
  2. Выполните некоторую блокирующую логику на контроллере, то есть система актора будет бездействовать, ожидая выполнения этой логики.
  3. Теперь, когда логика была выполнена, контроллер посылает зеленый свет системе актера, чтобы возобновить передачу сообщения.
  4. Актер Б получает "Сообщение" и печатает "Некоторая логика"
  5. Контроллер проверяет, завершена ли система субъекта, какой она является, и выполняет некоторую дополнительную логику.

Короче говоря, я хочу, чтобы внешний контроллер мог контролировать передачу сообщений в системе акторов во время выполнения.

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

0 ответов

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