0
votes

Comment utiliser plusieurs contrats à terme en cas d'échec aussi

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
      }


2 commentaires

Avez-vous besoin ESFUture pour exécuter si mongofuture réussit?


Oui j'en ai besoin.......


4 Réponses :


0
votes

Vous pouvez essayer comme ça. xxx

Vous pouvez maintenant manipuler si une erreur s'est produite lors du processus. Bonne chance.


2 commentaires

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 ne réalise rien ... Juste enroulement supplémentaire qui nécessite maintenant une compréhension où aucun n'était nécessaire auparavant.


.Succès 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".



0
votes

Vous pouvez aller avec récupérer , qui gérera toute correspondance jadrable que l'avenir original contient: xxx


0 commentaires

0
votes

Si vous voulez simplement vous connecter les exceptions, faites-la simplement avec chacun:

mongoFuture.failed.foreach {ex => logger.error("Mongo error", ex)}


0 commentaires

0
votes

Il est préférable d'utiliser mappe et récupérer au lieu de attendre.result xxx


0 commentaires