J'ai un acteur avec deux messages d'abord responsable de l'insertion de données dans MongoDB et le deuxième acteur est responsable de l'insertion de données dans ElasticseSearch, INSERINMONGO et INSERINES, nommément Il y aura un cas lorsque l'opération d'insertion de Mongodb échoue ou une opération d'insertion ES échoue en cas d'exception et je fais quelque chose comme celui-ci
try { val mongoFuture: Future[Boolean] = ask(artGroupPersistenceActor, PersistArtGroupInMongo(artGroup)).mapTo[Boolean] val esFuture: Future[Boolean] = ask(artGroupPersistenceActor, PersistArtGroupInES(artGroup)).mapTo[Boolean] val resultMongo = Await.result(mongoFuture, timeout.duration) log.debug("store: Record Inserted inserted in mongoDB {}", resultMongo) val resultES = Await.result(esFuture, timeout.duration) log.debug("store: Record Inserted in ES {}", resultES) } catch { case e: Exception => log.error("store:While inserting an artgroup Exception in artGroupPersistenceActor actor", e) throw e }
4 Réponses :
Vous pouvez essayer comme ça. Vous pouvez maintenant manipuler si une erreur s'est produite lors du processus. Bonne chance. P> P> P>
Qu'est-ce qui se passe "Code ici ..."? Si c'est un avenir, la capture d'essai n'atteint pas l'exception car le code se produit sur un fil différent. De plus, futur.Usucciful code> ne réalise rien ... Juste enroulement supplémentaire qui nécessite maintenant une compréhension où aucun n'était nécessaire auparavant.
.Succès code> n'est pas nécessaire, mais cette méthode construit un avenir déjà terminé avec le résultat spécifié, donc je suppose simplement. Même le processus se produit sur un fil différent, mais il a dit que "si Mongofuture a échoué, j'attrape son exception et cela devrait procéder à une esfuture".
Vous pouvez aller avec récupérer code>, qui gérera toute correspondance jadrable que l'avenir original contient:
Si vous voulez simplement vous connecter les exceptions, faites-la simplement avec chacun:
mongoFuture.failed.foreach {ex => logger.error("Mongo error", ex)}
Il est préférable d'utiliser mappe code> et
récupérer code> au lieu de
attendre.result code>
Avez-vous besoin
ESFUture code> pour exécuter si
mongofuture code> réussit?
Oui j'en ai besoin.......