繁体   English   中英

玩!框架和Akka告诉

[英]Play!Framework & Akka tell

在将Akka与Play(必须使用Java 7)集成时,我想要的是控制器动作向演员发送和忘记一条消息。 但是,我希望参与者将其工作的响应发送给发送http请求的客户端。

我已经在控制器中使用ask()成功尝试了此操作,并希望将其更改为使用tell()。 当问问返回未来时,这很“轻松”。

我知道我需要退还承诺。

我“了解” Akka的未来-只是无法将故事拼凑而成:

  • 我想象在控制器中,我可以Http.Context一条消息并传递Http.Context - current()吗? -我实际上想要Http.RequestHttp.Response以及Http.Session
  • 使用tell将消息发送给路由器tell
  • 控制器返回什么? 我的Promise< Result>在哪里-我是否要创建一个包装tell()的Future? 如果是这样,怎么办?
  • 一个工作人员演员完成工作(这可能意味着通过Http.Response序列化一些JSON对象),然后向发送方发送回复-谁? 玩动作?? 想象它是控制器中的Future,然后将Future <?>映射到Promise< Result>

(关于上面列表的事情不是很开心...)

为什么要为此奋斗? 我想在使用tell()时遵循建议-http://techblog.net-a-porter.com/2013/12/ask-tell-and-per-request-actors/

任何帮助表示赞赏。

谢谢,S-

您可以按照本文建议的相同方式实施它。 创建一个按请求的actor,无论成功还是失败,该actor都会完成一个承诺,将来会在播放控制器中返回。

所以您的控制器看起来像这样(对不起,代码在Scala中,尚未编译):

def index = Action.async {
  val responsePromise = Promise[String]
  Akka.system.actorOf(Props(classOf[MyPerRequestActor], responsePromise))
  responsePromise.future.map(Ok(_))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM