J'ai une classe d'utilité à partir de laquelle j'appelle un service api. Si tout va bien j'obtiendrai la sortie désirée qui est dans le format de chaîne. Ainsi c'est le cas de succès. Mais il peut arriver que j'obtiens une erreur supposer 404 si le serveur est en panne. Dans de tels cas, je veux appeler cette API pour supposer 3 fois avec 1 seconde d'intervalle entre eux. Si dans ces trois tentatives j'obtiens le succès de l'Api alors je ne calmerai pas l'api et n'inscrirai pas le résultat, Ou si après 3 tentatives il jette toujours l'erreur alors je ne continuerai pas et juste noterai l'erreur. ma classe utilitaireDans l'acteur akka si le message est l'exception comment appeler le même pour peu de temps avec intervalle fixe entre eux
public class Utils {
public void doOperation(String service_Url) throws Exception {
Object message= someFunction(service_Url);//this function is calling the service api
final ActorSystem system = ActorSystem.create("helloakka");
final ActorRef akkaBot=system.actorOf(Props.create(MyUntypedActor.class), "akkaBot");
akkaBot.tell(message, ActorRef.noSender());
}
}
Voici l'acteur
public class MyUntypedActor extends UntypedActor {
@Override
public void onReceive(Object message) {
if (message instanceof HTTPException) {
System.out.println(message);
//Here as it got exception.I want to call the actor 3 times with 1 second interval between them
}
else if (message instanceof String) {
System.out.println(message);
getSender().tell(value, getSelf());
}
else {
unhandled(message);
}
}
}
L'objectif est de tester un api particulier fonctionne ou ne pas utiliser akka actor.If l'api retourne exception alors appel que api en utilisant 3 fois acteur avec un intervalle de 1 sec entre chaque appel.Si après 3 fois nous recevons toujours l'erreur, puis enregistrer l'erreur, si en réessayant, nous obtenons la sortie désirée puis enregistrez-le.
Je ne sais pas comment y parvenir en utilisant des acteurs Akka.Veuillez me guider si vous le savez.
si son succès pour la première fois, il fonctionne comme souhaité.Mais si à la première tentative c'est une erreur, puis il crée l'objet RequestFailure et appelle la deuxième fois en utilisant rf.request.Si la deuxième fois (ou dans toute tentative) son succès n'est alors pas une instance d'exception donc 'getSender(). tell (response, getSelf());' est exécuté. Mais ici ce qui se passe est 'public void onReceive (objet message) {' méthode de 'class MyUntypedActor' reçoit la réponse ce que' getSender(). Tell' envoie et l'acteur est exécuté encore et encore.same se passe quand count > 3 et envoyez sendSender() @Ramon J –
@MithunDebnath Réponse mise à jour. Je référence le 'MyUntypedActor' comme l'expéditeur de la demande d'origine au lieu de l'expéditeur réel. Faites-moi savoir si vous voyez d'autres problèmes ... –
Je vais tester le code demain car je n'ai pas l'application avec moi en ce moment.Une chose que j'ai remarquée, mais j'ai oublié de vous demander.'if (rf.count < = 3) {Object response = someFunction (rf.request); 'ici si' if (réponse instanceOf HTTPException) {'alors vous avez écrit' getSelf(). Tell (nouveau message RequestFailure ((String), rf.count + 1), getSender(); 'ne devrait pas être' getSelf(). tell (nouveau RequestFailure ((String) rf.request, rf.count + 1), getSender(); 'Une autre chose est si count atteint max nombre je veux envoyer l'expéditeur réel l'information que «nombre maximum atteint» .De qui d'autre je l'envoie? @ Ramon –