【发布时间】:2012-04-06 07:29:48
【问题描述】:
出于学习目的,我正在尝试实现一个简单的播放应用程序,该应用程序从远程参与者获取数据。演员的代码如下:
import akka.actor.{Props, ActorSystem, Actor}
class NumbersServer extends Actor {
var number = 0
protected def receive = {
case 'next => {
number += 1
number
}
case 'reset => number = 0
case 'exit => context.stop(self)
case 'get => sender ! number
}
}
object Server {
def main(args: Array[String]) {
val system = ActorSystem("ServerSystem")
val server = system.actorOf(Props[NumbersServer], "server")
}
}
我将它打包到一个 jar 中并从命令行启动它。如果我尝试从另一个窗口打开的 Scala 控制台向这个演员发送消息,一切正常。现在我想从 Play 框架中获取演员。在Application 对象中,我定义了以下方法:
def numbers = Action {
Ok(views.html.numbers(Client.actor.path.name))
}
然后在models 包中定义Client 对象:
object Client {
import play.api.Play.current
val actor = Akka.system.actorFor("akka://ServerSystem@127.0.0.1:2552/user/server")
}
numbers.html.scala 文件:
@(message: String)
@main("Header") {
<h1>@message</h1>
}
所以我希望当我转到127.0.0.1:9000/numbers 时,我会得到一个包含服务器参与者路径的页面。而不是这个,我得到<h1>deadLetters</h1>。我做错了什么以及应该如何正确地做到这一点?
【问题讨论】:
-
您是否启用了两端的远程处理?
-
@ViktorKlang :我尝试以类似于普通 akka 的方式启用远程处理,但是没有 akka-remote 包,所以我只得到了
java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider并且不知道还能做什么。 -
Akka 文档相当不错:doc.akka.io/docs/akka/2.0/scala/remoting.html
-
对不起,我可能有什么不明白的地方。我阅读了这些手册,发现它们非常有用,事实上,当我在一个普通的 akka 应用程序中进行远程处理时,它就可以正常工作。但是如何在 play 框架下启用 akka 远程处理呢?将 akka-remote 依赖添加到 play 应用的 sbt 配置并编写与普通 akka 相同的配置文件就足够了吗?
-
您需要询问 Play!团队对此,他们随 Play 发布了一个 reference.conf 文件! 2:github.com/playframework/Play20/blob/master/framework/src/play/… 我假设这些事情在 Play 中有记录! 2个文档。 :-)
标签: scala akka playframework-2.0