【问题标题】:schedule jobs with play framework使用游戏框架安排工作
【发布时间】:2017-05-03 15:53:44
【问题描述】:

我的项目使用play framework 2.3,需要每10分钟计算一次用户在市场上列出的物品的实时价格(物品的价格根据销售种类的数量而变化,例如股票)。我用演员来做到这一点。但是,我有一个问题

项目启动时如何启动作业,我也可以在代码中停止作业?

 Akka.system.scheduler.schedule(0.microseconds, 10.minutes, tickActor, "job")

package job.scheduledJobs

import akka.actor.Actor


class JobModule extends Actor {
   override def preStart() {
   println("makeRealTimePrice Job start!!")
}

override def receive: Receive = {
    case "job" =>
    //calculate price
    case _ => Unit
}
}


class TradingHandler(override implicit val env: 
RuntimeEnvironment[SystemUser]) extends 
securesocial.core.SecureSocial[SystemUser] with CookieLang {
def job() = Action {
    implicit request =>
       val tickActor = Akka.system.actorOf(Props(new JobModule))
       val cancellable1 = Akka.system.scheduler.schedule(0.microseconds, 10.minutes, tickActor, "job")
      Ok("success")
    }
 }

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    我认为您正在寻找the Global object,您可以在其中挂接到应用程序的启动和停止事件以触发事件。据我了解,您需要在 Global 中有一个值来存储 CancellableonStop 回调可以在应用程序停止时取消它。

    【讨论】:

      【解决方案2】:

      在我看来你有两种可能:

      • 使用web socket - 因此您只需为每个用户实例化一个 Actor 并为每个 Actor 运行调度程序。
      • 使您的控制器成为单例并在该单例中实例化actor。

      Akka Actor 的创建成本很低,因此我认为您应该为每个客户端实例化一个 Actor,而不是为所有客户端实例化一个 Actor。

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 1970-01-01
        • 2011-11-09
        • 2019-04-14
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2012-04-01
        • 1970-01-01
        相关资源
        最近更新 更多