Akka Ask Pattern对未来的复苏

时间:2014-07-02 17:39:04

标签: akka spray

我正在写一个Spray + Akka小型服务器。博客文章脱颖而出并推荐了这种问题模式。 CapserOk类有这样的标志:

case class CasperOk(company: Option[Company.Company], existOrNot: Boolean)

我正在检索此数据库行,如果它不存在或发生了一些错误,我想从Spray发出一个回复来告诉客户。

然而,使用这种模式,我不知道在哪里注入开关。

我尝试将代码更改为:

   val response = (secCompanyActor ? jObjectFromCasper(company))
                .mapTo[CasperOk]
                .map(result => result.succeedOrNot match {
                  case true => (OK, "transaction successful")
                  case false => (Conflict, "FileLoc format is wrong or it already exists")
                })
                .recover{case _ => (InternalServerError, "error occured! We will fix this")}

    complete(response)

Spray使用complete()发送HTTP响应。 complete()可以是两个对象,也可以是字符串/可序列化对象。我想使用两种对象模式(允许我手动编码其标题),理想的情况应该看起来像complete(response._1, response._2)

有没有办法用Akka的未来实现这一目标?

1 个答案:

答案 0 :(得分:4)

您可以通过在将来的onComplete方法上注册完成函数来实现此目的。

response.onComplete {
  case (statusCode, message) => complete(statusCode, message)
}