为Scala实现Akka in-Play框架2.4

为Scala实现Akka in-Play框架2.4,scala,akka,playframework-2.4,Scala,Akka,Playframework 2.4,我试图复制本文中提出的基本示例。但是我很难把最后的部分放在一起 我在app/actors/HelloActor.scala中定义了参与者(见段落),代码如下: package actors import akka.actor._ object HelloActor { def props = Props[HelloActor] case class SayHello(name: String) } class HelloActor extends Actor {

我试图复制本文中提出的基本示例。但是我很难把最后的部分放在一起

我在
app/actors/HelloActor.scala
中定义了参与者(见段落),代码如下:

package actors

import akka.actor._

object HelloActor {
    def props = Props[HelloActor]

    case class SayHello(name: String)
}

class HelloActor extends Actor {
    import HelloActor._

    def receive = {
        case SayHello(name: String) =>
            sender() ! "Hello, " + name
    }
}
然后(请参阅),我想我应该在
app/controllers/Hello.scala
创建一个控制器,如下所示:

package controllers

import play.api.mvc._
import akka.actor._
import javax.inject._

import actors.HelloActor

@Singleton
class Hello @Inject() (system: ActorSystem) extends Controller {

    val helloActor = system.actorOf(HelloActor.props, "hello-actor")

    ...

}
问题:我在何处以及如何利用下一段中的代码来获得有效的解决方案?我尝试将其添加到上面的
Hello.scala
控制器中,但没有成功

import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.concurrent.duration._
import akka.pattern.ask
implicit val timeout = 5.seconds

def sayHello(name: String) = Action.async {
    (helloActor ? SayHello(name)).mapTo[String].map { message =>
        Ok(message)
    }
}

找到解决方案后,我在定义隐式超时时遇到了一些问题,这是正在工作的控制器:

package controllers

import play.api.mvc._
import akka.actor._
import javax.inject._

import actors.HelloActor
import actors.HelloActor.SayHello

import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.concurrent.duration._
import akka.pattern.ask
import akka.util.Timeout

@Singleton
class Hello @Inject() (system: ActorSystem) extends Controller {

  val helloActor = system.actorOf(HelloActor.props, "hello-actor")

  implicit val timeout: Timeout = 5.seconds

  def sayHello(name: String) = Action.async { 

    (helloActor ? SayHello(name)).mapTo[String].map { message ⇒
      Ok(message)
    }
  }
}
另外,我在
app/conf/routes
中添加了以下路由:

# Actor test
GET     /hello/:name                controllers.Hello.sayHello(name)

它应该像预期的那样工作,您有哪些错误?使用
implicit val timeout=5.seconds
I wag获取以下错误
value seconds不是Int的成员注意:这里不适用implicit value timeout,因为它位于应用点之后,并且缺少显式的结果类型
而且我对如何放置所有内容没有100%的把握在控制器中,如果您编写类似于
隐式val timeout:timeout=5的内容,则可能会起作用。请注意,我已显式添加了类型),这是因为显式类型将发生隐式转换。@EndeNeu是的,谢谢,它起作用了,我正在编辑我的答案以反映这一点