在akka类型的actor中创建调度程序/计时器

pb3s4cty  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(239)

我试图在我的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"""")
  }  
}

我收到一个错误,指出隐式执行上下文不在范围内。
当在一个类型化的参与者中时,我应该从哪里获得执行上下文?还有,这是我应该如何设置调度器/计时器吗?

a14dhokn

a14dhokn1#

请注意,使用Behaviors.withTimers { timers => ... }应优先于直接使用系统调度程序,因为它会在执行元停止等情况下处理删除已调度的发送。

ubof19bj

ubof19bj2#

在非类型化的Akka中,默认的ExecutionContextsystem对象中的dispatcher对象:

implicit val executionContext: ExecutionContext = ctx.system.dispatcher

我把它放在一个用于所有Actors的基类中,沿着还有TimeoutActorMaterializer的默认隐式。

相关问题