こんにちは、親アクターに監視を適用しましたが、子は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")
私は何か間違ったことをしていますか?
私を助けてください 。