我有一个akka actor,它向自己发送消息:
def receive = {
while (...) {
self ! "some message"
}
}
我想使用Throttler来控制这个actor发送给自己的消息流。
val throttler = system.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
throttler ! SetTarget(Some(self))
,然后更改while循环以向throttler发送消息:
while (...) {
throttler ! "some message"
}
问题是我不知道如何从actor内部访问"系统"来创建节流器。如何做到这一点?有没有更好的办法?
在actor内部,使用context。
为什么不将节流器创建为子演员呢?:
def receive = {
val throttler = context.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
throttler ! SetTarget(Some(self))
while (...) {
throttler ! "some message"
}
}
因为如果计算参与者已经死亡,那么让Throttler存活是没有意义的。
您可以使用context
:
val throttler = context.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
在Akka中,您可以使用Actor系统或Actor上下文创建Actor,如:
class FirstActor extends Actor {
val child = context.actorOf(Props[MyActor], name = "myChild")
// plus some behavior ...
}
context
是每个Actor可用的变量。
如果你用actor Context创建actor,它将成为创建actor的受监督的子对象,请参考Akka文档中关于监督和actor创建的更多信息。