J'ai un client feindre avec cet appel externe:Puis-je lancer une erreur personnalisée si un appel protégé par hystrix expire?
@RequestMapping(method = RequestMethod.GET, value = "GetResourceA", consumes = "application/json")
@Cacheable("ResourceA")
List<Stop> getResourceA() throws MyOwnException;
Et dans mon application.yml
je ce paramètre:
hystrix:
command:
default:
execution.isolation.thread.timeoutInMilliseconds: 1000
fallback.enabled: false
Maintenant, si les temps getResourceA sur, soit il faut plus d'une seconde pour terminer , je reçois ce soit:
com.netflix.hystrix.exception.HystrixRuntimeException: getResourceA timed-out and no fallback available
Ou, si je définis une solution de repli à partir de laquelle je jette ma propre exception, je reçois ceci:Puis-je ne pas lancer ma propre exception à partir de la solution de repli? Et si je souhaite lancer ma propre exception lorsque le service est arrêté? Je voudrais ne pas avoir de solution de repli (parce que je n'ai aucune valeur raisonnable pour revenir de la solution de repli), mais plutôt lancer ma propre erreur que je peux attraper et laisser reprendre le programme. Est-ce que quelqu'un peut m'aider avec ça?
mise à jour après la réponse de Ben:
J'ai donc essayé l'approche avec la capture HysterixRuntimeException et de vérifier ce qui a causé, mais a fini avec ce code laid:
try {
getResourceA();
} catch (HystrixRuntimeException e) {
if (e.getFailureType().name().equals("TIMEOUT")) {
throw new MyOwnException("Service timed out");
}
throw e;
}
Tout ça pour être capable de lancer MyOwnException sur un timeout. Sûrement il doit y avoir un autre moyen?
Merci! C'est ce que je ferai à moins qu'il y ait une autre manière qui ne m'oblige pas à attraper la (hideuse) HystrixRuntimeException dans "mon propre code". – L42
@ L42. Aucun problème. J'ai rencontré le même problème l'année dernière, et ce serait le meilleur que je pourrais trouver. Je serais heureux de voir si quelqu'un d'autre a une meilleure suggestion que je peux utiliser pour ranger les choses un peu :) –
Je l'ai essayé et a fini par devoir faire ce qui suit afin de récupérer l'exception que je lance dans la méthode de repli: http: //pastebin.com/Dxw95kSB. Connaissez-vous une meilleure façon de le faire? – L42