web-dev-qa-db-fra.com

Comment réessayer avec hystrix

J'ai une commande hystrix qui encapsule un appel REST. En cas d'échec (par exemple, timeout), je veux faire une seule nouvelle tentative et en cas d'échec retourner une erreur appropriée.

Comme je peux le voir, Hystrix ne prend pas en charge les tentatives. La seule façon de le faire avec Hystrix est de mettre la logique principale dans la méthode getFallback (). Mais cela ne semble pas être correct.

Alors, quelle est la bonne façon d'implémenter le délai d'expiration avec hystrix?

12
evgeniy44

Hystrix lui-même ne se soucie pas du type de commande qui en résulte et il ne prend pas en charge l'idée de nouvelles tentatives. Exemple derrière l'idée: si votre commande (qui encapsule une REST) est paramétrée, il se peut que certains points de terminaison de ressource soient réessayés tandis que d'autres ne le sont pas. Il ne serait pas agréable d'en avoir deux des commandes qui font plus ou moins la même chose ni un paramètre technique pour activer une nouvelle tentative. De plus, cela ajoutera une complexité supplémentaire au projet.

Pour contourner ce problème et rester avec Hystrix, vous voudrez peut-être jeter un œil à SpringRetry si vous travaillez sur une application Spring.

Une autre solution possible est resilience4j qui pourrait être considérée comme une combinaison d'Hystrix et SpringRetry dans ce contexte.

11
meistermeier