嗨,我已经对 Parent actor 应用了监督,而孩子是 Throwing MongoTimeOutException(我故意提出该异常以进行测试),但在监督中调用了默认情况。
这是代码:
class child extends Actor {
def receive = {
case insertData(data) =>
//insertion code ,MongoTimeOutException is raised i have killed the service intentionally
}
}
class parent extends Actor {
val child=context.actorOf.....//actor creation code
override val supervisorStrategy = OneForOneStrategy(
maxNrOfRetries = 10, withinTimeRange = 10 seconds) {
case _:MongoException=>
log.error("Got some MongosException, Supervision Strategy says Resume")
Resume
case _:ElasticsearchTimeoutException=>
log.error("Got some ElasticsearchTimeoutException, Supervision Strategy says Resume")
Resume
case _:ElasticsearchException=>
log.error("Got some ElasticsearchException, Supervision Strategy says Resume")
Resume
case _ =>
log.error("Got some Exception, Supervision Strategy says Resume")
Resume
}
def receive = {
case Msg(data) =>
child ! insertData(data)
}
}
object test extends App
{
val parent = system.actorof....//actor creation code
parent !Msg(data)
}
当我运行此代码时,确实会发生 MongoTimeOutException,但这种情况在监督中被调用。
case _ =>
log.error("Got some Exception, Supervision Strategy says Resume")
Resume
为什么呢?据我说,它应该援引这种情况:
case _:MongoException=>
log.error("Got some MongosException, Supervision Strategy says Resume")
难道我做错了什么?
请帮我 。