Akka集群单例作为调度程序

时间:2016-06-07 08:06:17

标签: scala playframework akka akka-cluster

我正在使用Akka群集运行Play。 我需要一个“Singleton Scheduler”来每小时执行一些任务。

到目前为止我发现的是,我应该使用ClusterSinglegonManager。 但我不确定我的演员必须如何。 在我看来,我不需要“接收”方法。

那就是我如何实现我的单身人士:

system.actorOf(
  ClusterSingletonManager.props(
    singletonProps = MySingletonActor.props(configuration),
    terminationMessage = PoisonPill,
    settings = ClusterSingletonManagerSettings(system)),
  name = "mysingletonactor")

这适合:

object MySingletonActor {
  def props(configuration: Configuration): Props = Props(new MySingletonActor(configuration))
}

class MySingletonActor(configuration: Configuration) extends Actor with ActorLogging {
  context.system.scheduler.schedule(2 seconds, 2 seconds)(println("Hallo Welt"))
  def receive = ???
}

但当然它会引发异常,因为接收方法缺少实现。但它确实有效。

去哪里最好的方法是什么? 只安排一个“Tick”并在接收方法中处理Tick ...感觉很尴尬......

class MySingletonActor(configuration: Configuration) extends Actor with ActorLogging {
  case object Tick
  context.system.scheduler.schedule(2 seconds, 2 seconds, self, Tick)
  def receive = { case Tick => println("Hallo Welt") }
}

Akka中是否有任何类型的Singleton Scheduler?

1 个答案:

答案 0 :(得分:2)

您可以使用Actor.emptyBehavior不引发异常,而不是将???写为接收方法。这是一个Receive-expression,根本不匹配任何消息。