akka 定时任务实例for play2.1
2015-11-18 14:12
726 查看
有时需要设定将来发生的事情,这时该怎么办?ActorSystem搞定一切!
在那儿你能找到scheduler方法,它返回一个 akka.actor.Scheduler 实例, 这个实例在每个Actor系统里是唯一的,用来指定一段时间后发生的行为。
请注意定时任务是使用ActorSystem的MessageDispatcher执行的.
你可以计划向actor发送消息或执行任务的代码 (函数或Runnable).
你会得到一个Cancellable类型的返回值,你可以调用cancel来取消定时任务的执行。
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."))
}
}
在那儿你能找到scheduler方法,它返回一个 akka.actor.Scheduler 实例, 这个实例在每个Actor系统里是唯一的,用来指定一段时间后发生的行为。
请注意定时任务是使用ActorSystem的MessageDispatcher执行的.
你可以计划向actor发送消息或执行任务的代码 (函数或Runnable).
你会得到一个Cancellable类型的返回值,你可以调用cancel来取消定时任务的执行。
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."))
}
}
相关文章推荐
- 信息学奥林匹克竞赛-计数问题
- java zip压缩解压 工具类
- 特征选择之信息增益法
- centos 清理内存缓存
- Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)
- 程序架构探讨—001 多段select语句的方案
- 程序架构探讨—001 多段select语句的方案
- 15-11-18 注释
- leetcode Remove Duplicates from Sorted List
- gpg 自动解密
- 阿里云Ubuntu 14.04.2 iptables的保存
- hdoj Cow Sorting 2838 (树状数组)
- strcpy_s和strcpy()函数
- 利用NSCache提升效率
- Android查看应用包名package和入口activity名称的方法
- error C4996: 'sprintf': This function or variable may be unsafe.Consider using sprintf_s instead.
- Mysql 会导致锁表的语法
- UIView 页面跳转动画
- newinstance()和new有什么区别?
- ASP.NET MVC使用Uploadify上传文件