scala中akka actor和future中异常的升级

时间:2014-09-08 08:44:57

标签: scala exception-handling akka future spray

我正在开发一个服务器,它是另外两个端点之间的中间服务器。 所以我实现了一个触发计算的喷射路径,这个计算调用一个调用喷雾客户端的actor。 以下模式适用:

客户端=> ... => (喷涂路线=>服务人员=>喷涂客户端)=> ... =>远程服务器。 我正在开发异常管理,我很难理解该怎么做。 当远程服务器向我发送BadRequest或任何错误代码时,我想抛出异常,这导致向客户端回答同样的错误。

我想我的问题是关于异常处理和推出的一般问题。

我天真地相信,当我将来抛出异常时,未来可以称之为失败:

    def receive = {
      case SendRequest => {
           val s = sender()
           val call = for { 
              request <- ComputeRequest
              result <- CallSprayClient ? request
           } yield result

           call onComplete {
             case Success(succ) => s ! succ
             case Failure(e) = throw e
           }
       }
    }

问题是,当ComputeRequest或CallSprayClient抛出异常时,不会触发我的回调的Failure情况。 我查看了监督模式,但似乎导致错误的异常或消息也没有传播。 在我的特殊情况下,根据异常,我想向我的客户发送不同的http响应,因此需要升级。

我应该采用什么样的发展模式?

感谢。

0 个答案:

没有答案