我正在开发一个服务器,它是另外两个端点之间的中间服务器。 所以我实现了一个触发计算的喷射路径,这个计算调用一个调用喷雾客户端的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响应,因此需要升级。
我应该采用什么样的发展模式?
感谢。