2017-05-29 2 views
3

Nous utilisions la fonctionnalité hystrix en étendant directement la classe HystrixCommand. Toutefois, pour certaines exceptions métier, la méthode de repli de hystrix est déclenchée.Comment dire hystrix ne pas déclencher de repli pour certaines des exceptions dans la commande hystrix

Je ne souhaite pas déclencher la solution de repli hystrix pour certaines exceptions spécifiques à l'activité. Comment je peux y arriver sans annotation basée?

Merci à l'avance ..!

Répondre

0

utiliser l'annotation ignoreExceptions param

@HystrixCommand(ignoreExceptions = { BaseException.class, MissingServletRequestParameterException.class, TypeMismatchException.class }) 

Voir https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica#error-propagation

Je vois que vous étendez le HystrixCommand au lieu d'utiliser l'annotation, mais cela n'a pas d'importance, vient de mettre cette propriété dans la commande et ça devrait avoir le même effet.

Malheureusement, une commande Hystrix est créée par un modèle Builder, vous devrez donc faire du piratage. Le ignoreExceptions a été ajouté à DefaultProperties.java, qui est utilisé dans le HystrixCommandBuilder

+0

Selon ce que je crois comprendre. À l'intérieur de la méthode ignoreexceptions de HystrixCommandBuilder, il ne fait que copier la liste des exceptions. Mais selon le commentaire de la méthode, j'ai compris que ces exceptions ignorées peuvent être enveloppées dans Hystrixbadrequestexception. Mais pouvez-vous me dire comment faire cela et aussi d'une meilleure façon avec un extrait de code – LazyGuy

+0

"juste définir cette propriété dans la commande" - il n'y a pas de telle propriété dans 'HystrixCommand' –

0

Si vous intégrez votre logique dans un try/catch et relancez toutes les exceptions dans une exception HystrixBadRequestException, cela ne déclenchera pas le repli.

@Override 
protected Object run() throws Exception { 
    try { 
     return //call goes here 
    } 
    catch (Throwable e) { 
     //We wrap any exceptions in a HystrixBadRequestException because this way any other errors will not 
     //trip the short circuit 
     throw new HystrixBadRequestException("Exception thrown hystrix call", e); 
    } 
} 

De la documentation: http://netflix.github.io/Hystrix/javadoc/com/netflix/hystrix/exception/HystrixBadRequestException.html

Une exception représentant une erreur avec des arguments fournis ou état plutôt qu'un échec d'exécution. Contrairement à toutes les autres exceptions lancées par un HystrixCommand, cela ne déclenche pas de repli, ne compte pas dans les métriques de défaillance et ne déclenche donc pas le disjoncteur.

REMARQUE: ceci ne doit être utilisé que lorsqu'une erreur est due à une entrée utilisateur telle que IllegalArgumentException, sinon cela annule l'objectif de tolérance aux pannes et de comportement de repli.