play 框架 2.1 - 调度异步任务 [英] play framework 2.1 - scheduling async tasks

查看:32
本文介绍了play 框架 2.1 - 调度异步任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 play 的 2.0.x 文档中,您可以看到如何安排异步任务:

In play's 2.0.x doc you can see how to schedule asynchronous tasks:

http://www.playframework.org/documentation/2.0.4/ScalaAkka

Akka.system.scheduler.schedule(0 seconds, 30 minutes, testActor, "tick")

你怎么能用最近重新发布的 Play 2.1 达到同样的效果???

How can you achieve the same thing withthe recently releades Play 2.1???

整个 akka API 似乎发生了变化...

The whole akka API seems to have changed...

我已经检查过:

https://github.com/playframework/Play20/wiki/Highlightshttps://github.com/playframework/Play20/wiki/Migration并且http://doc.akka.io/docs/akka/2.1.0-RC1/project/migration-guide-2.0.x-2.1.x.html

https://github.com/playframework/Play20/wiki/Highlights https://github.com/playframework/Play20/wiki/Migration and also http://doc.akka.io/docs/akka/2.1.0-RC1/project/migration-guide-2.0.x-2.1.x.html

也在这里询问:https://groups.google.com/d/topic/play-framework/7VcwNea6QlM/讨论

推荐答案

使用 示例代码Akka API> 我做了快速测试,对我有用.

Using sample code and Akka API I made fast test, works for me.

比较 2.0.4 和 2.1RC1 之间的代码我可以看到在调度程序的情况下只有两个变化:

Comparing code between 2.0.4 and 2.1RC1 I can see there're only two changes in case of scheduler:

  1. 替换导入

  1. replaced import

// import akka.util.duration._
import scala.concurrent.duration._

  • 添加导入:

  • added import:

    import play.api.libs.concurrent.Execution.Implicits._
    

  • app/controllers/Application.scala

    package controllers
    
    import play.api._
    import play.api.mvc._
    import play.libs.Akka
    
    import akka.actor._
    import scala.concurrent.duration._
    import play.api.libs.concurrent.Execution.Implicits._
    
    object Application extends Controller {
    
      def index = Action {
    
        // say hello
        Logger.info("hello, index action started")
    
        val Tick = "tick"
        val Tack = "tack"
    
        val tickActor = Akka.system.actorOf(Props(new Actor {
          def receive = {
            case Tick => Logger.info("that still ticks!")
            case Tack => Logger.warn("... 7 seconds after start, only once")
          }
        }))
    
        // Repeat every 5 seconds, start 5 seconds after start
        Akka.system.scheduler.schedule(
          5 seconds,
          5 seconds,
          tickActor,
          Tick
        )
    
        // do only once, 7 seconds after start
        Akka.system.scheduler.scheduleOnce(7 seconds, tickActor, Tack)
    
        Ok(views.html.index("Your new application is ready."))
      }
    
    }
    

    编辑

    注意,正如我从 Julien 在群组中的帖子中看到的,仅导入 defaultContext 就足够了:

    Nota bene, as I can see from Julien's post on the group, that's enough to import defaultContext only:

    import play.api.libs.concurrent.Execution.Implicits.defaultContext
    

    这篇关于play 框架 2.1 - 调度异步任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆