如何从actor内部获取actor系统引用

Dan*_*ier 9 scala throttling actor akka

我有一个向自己发送消息的akka​​ actor:

  def receive = {
    while (...) {
       self ! "some message"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我想使用Throttler来控制此actor发送给自己的消息流.

  val throttler = system.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
  throttler ! SetTarget(Some(self))
Run Code Online (Sandbox Code Playgroud)

然后更改while循环以向throttler发送消息:

    while (...) {
       throttler ! "some message"
    }
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何从actor内部访问"系统",以创建节流器.这该怎么做?有没有更好的方法?

小智 8

在actor内部,使用context.system访问ActorSystem。


Mik*_*378 7

你为什么不把儿童演员当作节制者?

def receive = {
    val throttler = context.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
    throttler ! SetTarget(Some(self))
    while (...) {
       throttler ! "some message"
    }
}
Run Code Online (Sandbox Code Playgroud)

因为如果计算机演员死了就让Throttler活着是没有意义的.


Vin*_*gio 5

在Akka中,您可以使用Actor系统或Actor Context创建Actor,如:

class FirstActor extends Actor {
  val child = context.actorOf(Props[MyActor], name = "myChild")
  // plus some behavior ...
}
Run Code Online (Sandbox Code Playgroud)

context 是每个Actor可用的变量.

如果您使用actor创建actor,它将成为创建actor的受监督子项,请参阅Akka Docs有关监督Actor Creation的更多信息.