我有一个向自己发送消息的akka演员:
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内部访问“系统”,以创建节流器。这该怎么做?有没有更好的方法?
答案 0 :(得分:7)
为什么不作为儿童演员制作节流器?:
def receive = {
val throttler = context.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))
throttler ! SetTarget(Some(self))
while (...) {
throttler ! "some message"
}
}
因为如果计算机演员死了就让Throttler活着是没有意义的。
答案 1 :(得分:6)
在actor内部,使用context.system访问ActorSystem。
答案 2 :(得分:5)
在Akka中,您可以使用Actor系统或Actor上下文创建一个Actor,如:
class FirstActor extends Actor {
val child = context.actorOf(Props[MyActor], name = "myChild")
// plus some behavior ...
}
context
是每个Actor都可用的变量。
如果您使用actor创建actor,则它将成为创建actor的受监督子项,请参阅Akka Docs about supervision和Actor Creation以获取更多信息。
答案 3 :(得分:4)
您可以使用context
:
val throttler = context.actorOf(Props(new TimerBasedThrottler(15 msgsPer (1.minute))))