Play!Framework&Akka告诉

 卓慧大美女_502 发布于 2022-12-31 16:20

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

我已经在我的控制器中使用ask()成功地尝试了这个...并且想要将其更改为使用tell().当问题回归未来时,它很"容易".

我知道我需要返回一个承诺.

我"理解"阿卡的未来 - 只是不能将故事拼接在一起:

我想象在控制器中,我可以撰写一条消息并通过Http.Context- current()?- 我其实想要的Http.Request,Http.Response也许是Http.Session

使用发送此消息给路由器actor tell

控制器返回什么?我在哪里Promise< Result>- 我是否要创建一个包装tell()的Future?如果是这样,怎么样?

一个工人演员完成工作(这可能意味着在Http.Response上序列化一些JSON对象)并向发件人发送回复 - 谁?玩动作?? 想象它是控制器中的未来,我会将Future <?>映射到Promise< Result>??

(关于以上列表的事情并不是......)

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

任何帮助赞赏.

谢谢,s-

1 个回答
  • 您可以按照文章建议的相同方式实现它.创建一个每请求的actor,在成功或失败时将完成在play控制器中返回未来的promise.

    所以你的控制器看起来像这样(抱歉,代码在Scala中而不是编译):

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

    2022-12-31 16:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有