2016-10-27 1 views
0

Salut je l'ai appliqué la supervision sur l'acteur parent et l'enfant est de lancer MongoTimeOutException (i intentionly soulevé cette exception à des fins d'essai), mais le cas par défaut suis invoquais en matière de supervision est le code icipourquoi cas par défaut de stratégie de surveillance se est invoquée

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) 
} 

quand je lance ce code MongoTimeOutException ne se produisent, mais ce cas mais j'ai invoqué dans la supervision

case _ => 
     log.error("Got some Exception, Supervision Strategy says Resume") 
     Resume 

pourquoi est-ce pas? selon moi, il devrait invoquer ce cas

case _:MongoException=> 
    log.error("Got some MongosException, Supervision Strategy says Resume") 

Je fais quelque chose de mal? aidez-moi s'il vous plaît

Répondre

0

Imprimez la classe de la valeur de casse par défaut et voyez quelle est la véritable exception afin que vous puissiez le gérer.

Voici votre code

case _ => 
     log.error("Got some Exception, Supervision Strategy says Resume") 
     Resume 

Voici ce que vous avez à faire (Imprimer la classe d'exception)

case ex => 
    log.error(s"Exception $ex of type ${ex.getClass}.Got some Exception, Supervision Strategy says Resume", ex) 
    Resume 

Le code ci-dessus vous aidera à comprendre ce qui est le message exact qui ne pouvait pas être attrapé.