Scala播放调度程序与后台作业的演员
我对Scala和Play framework还不熟悉,我正试图弄清楚如何使用后台作业 我发现安排作业基本上有两种方法:创建参与者或安排异步任务 我想请教一下,什么时候更好?我发现演员非常复杂,有很多样板代码,我不喜欢编写比实际动作代码更多的代码来触发动作 下面是一个如何使用调度程序的示例Scala播放调度程序与后台作业的演员,scala,playframework,akka,Scala,Playframework,Akka,我对Scala和Play framework还不熟悉,我正试图弄清楚如何使用后台作业 我发现安排作业基本上有两种方法:创建参与者或安排异步任务 我想请教一下,什么时候更好?我发现演员非常复杂,有很多样板代码,我不喜欢编写比实际动作代码更多的代码来触发动作 下面是一个如何使用调度程序的示例 def send(purchase: Purchase): Unit = system.scheduler.scheduleOnce(100.milliseconds) { execute(pur
def send(purchase: Purchase): Unit =
system.scheduler.scheduleOnce(100.milliseconds) {
execute(purchase)
}
def execute(purchase: Purchase): Unit = {
... send email ...
... calculate stuff and write to DB ...
}
与上面的代码相比,如果使用Actor,我首先需要声明一个Actor:
object ConfiguredActor {
case object GetConfig
}
class ConfiguredActor @Inject() (configuration: Configuration) extends Actor {
...
}
然后把它绑起来
class MyModule extends AbstractModule with AkkaGuiceSupport {
def configure = {
bindActor[ConfiguredActor]("configured-actor")
}
}
然后注入并使用它
class Application @Inject() (@Named("configured-actor") configuredActor: ActorRef)
(implicit ec: ExecutionContext) extends Controller {
def getConfig = Action.async {
(configuredActor ? GetConfig).mapTo[String].map { message =>
Ok(message)
}
}
}
还有一个儿童演员的概念,我不知道什么时候使用它
文档没有明确说明何时应该使用每种方法。我有一种感觉,调度器更好地用于fire and forget任务,而当需要响应时,参与者更好。但我不确定
Scheduler和Actor的最佳实践和示例用例是什么?您是否可以添加一个示例,说明为什么您认为Actor很复杂,或者您最终如何得到大量样板代码?谢谢您的反馈,请更新!