如何在Akka中控制actor系统的运行时执行?

时间:2018-03-25 15:31:19

标签: scala akka future actor akka-dispatcher

我一直试图通过某种外部(与actor系统分开)控制器找到一种方法来控制actor系统中的运行时消息传递。换句话说,给定一个actor系统(我不想改变):我如何设置一种控制在其中传递的消息的控制器?

例如,假设给定的actor系统具有以下设置:

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. 演员A收到消息"开始"从外面发送"消息"演员B
  2. 在控制器上执行一些阻塞逻辑,即actor系统将无所事事地等待执行此逻辑。
  3. 现在逻辑已经执行,控制器为演员系统发送绿灯以恢复传递消息。
  4. 演员B接收"消息"并打印" Some Logic"
  5. 控制器检查actor系统是否被终止,并且执行一些额外的逻辑。
  6. 简而言之,我希望外部控制器能够在运行时控制在actor系统中传递的消息。

    我在想这个控制器可能是使用调度程序,路由器actor逻辑和期货来实现的。我没有在Akka文档中找到任何关于此的例子,所以这甚至可以实现吗?

0 个答案:

没有答案