【发布时间】:2019-01-25 14:35:01
【问题描述】:
我有一个负责 MongoDB CRUD 操作的演员,它可能会抛出一个 mongoException 我想在我使用询问模式的调用代码中捕获这个异常,但我仍然得到一个 TimeOutException,这在我的案例来自我的文档over this link
警告 要完成异常,您需要向发件人发送 akka.actor.Status.Failure 消息。当参与者在处理消息时抛出异常时,这不会自动完成。
我按照文档中给出的代码 sn-p
这是我的代码
class test extends Actor {
def receive () {
case GetRecordLists=>
try {
//some operations here
sender ! resultList
}
catch {
mongoEX:MongoException=>
log.error("got mongodb exception",mongoex)
sender ! akka.actor.Status.Failure(mongoEx)
throw mongoEx
e:Exception=>
log.error("got exception",e)
sender ! akka.actor.Status.Failure(e)
throw e
}
}
}
class MainClass extends App {
try {
val future: Future[scala.collection.mutable.Set[String]] = ask(test, GetRecordLists).mapTo[scala.collection.mutable.Set[String]]
val results = Await.result(future, timeout.duration)
}
catch {
case e:Exception=>log.error("got the exception in main class ",e)
throw new Exception(e)
}
}
这里的预期行为是捕获MongoException
但我得到了
java.util.concurrent.TimeoutException: Futures timed out after [5 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.Await$.result(package.scala:111) ~[scala-library-2.11.1.jar:na]
at MainClass(MainClass.scala:118) [xyz_2.11.jar:0.1.0-SNAPSHOT]
【问题讨论】: