簡體   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