我试图在我的akka中创建一个调度器,只是为了测试它,每隔x秒运行一次。
def start(): Behavior[ClientMsg] = Behaviors.setup { ctx =>
ctx.log.info("start() called")
ctx.system.scheduler.scheduleAtFixedRate(30.seconds, 5000.millis) { () =>
ctx.self ! TestMessage(""""this is pretty cool"""")
}
}
我收到一个错误,指出隐式执行上下文不在范围内。
当在一个类型化的参与者中时,我应该从哪里获得执行上下文?还有,这是我应该如何设置调度器/计时器吗?
2条答案
按热度按时间a14dhokn1#
请注意,使用
Behaviors.withTimers { timers => ... }
应优先于直接使用系统调度程序,因为它会在执行元停止等情况下处理删除已调度的发送。ubof19bj2#
在非类型化的Akka中,默认的
ExecutionContext
是system
对象中的dispatcher
对象:我把它放在一个用于所有Actors的基类中,沿着还有
Timeout
和ActorMaterializer
的默认隐式。