Hystrix commande échoue avec “timed-out et pas de secours disponible”
J'ai remarqué que certaines des commandes dans mon application échouer avec
Caused by: ! com.netflix.hystrix.exception.HystrixRuntimeException: GetAPICommand timed-out and no fallback available.
out: ! at com.netflix.hystrix.HystrixCommand.getFallbackOrThrowException(HystrixCommand.java:1631)
out: ! at com.netflix.hystrix.HystrixCommand.access$2000(HystrixCommand.java:97)
out: ! at com.netflix.hystrix.HystrixCommand$TimeoutObservable$1$1.tick(HystrixCommand.java:1025)
out: ! at com.netflix.hystrix.HystrixCommand$1.performBlockingGetWithTimeout(HystrixCommand.java:621)
out: ! at com.netflix.hystrix.HystrixCommand$1.get(HystrixCommand.java:516)
out: ! at com.netflix.hystrix.HystrixCommand.execute(HystrixCommand.java:425)
out: Caused by: ! java.util.concurrent.TimeoutException: null
out: !... 11 common frames omitted
C'est mon Hystrix de configuration de remplacement:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=210000
hystrix.threadpool.default.coreSize=50
hystrix.threadpool.default.maxQueueSize=100
hystrix.threadpool.default.queueSizeRejectionThreshold=50
Ce genre de délai d'expiration est-ce? Est-ce une lecture/délai d'attente de connexion à l'application externe? Comment dois-je aller sur le débogage?
OriginalL'auteur dkulkarni | 2014-12-09
Vous devez vous connecter pour publier un commentaire.
C'est un Hystrix de Commande Délai d'expiration de ce délai d'attente est activée par défaut pour chaque commande, vous définissez la valeur à l'aide de la propriété:
De sorte que vous pouvez augmenter la valeur de délai d'expiration ou de désactiver l'heure par défaut (si applicable dans votre cas) pour votre commande à l'aide de la propriété:
@HystrixProperty(name = "hystrix.command.default.execution.timeout.enabled", value = "false")
Vous pouvez trouver plus d'informations ici: https://github.com/Netflix/Hystrix/wiki/Configuration#CommandExecution
L'exception est appelé
HystrixRuntimeException
et c'est la même exception pour les délais d'attente pour si la commande a jeté une autre exception.Où est-il à config @HystrixProperty? Sont là zuul?
OriginalL'auteur psantamaria
Il serait peut-être êtes-vous en debug ou votre connexion est trop lente, de threads par défaut délai d'exécution est de seulement 1 seconde, de sorte que vous pouvez obtenir ce message facilement si vous mettez un point de rupture dans votre commande disons
Bien que ce n'est pas votre cas, mais peut aider quelqu'un d'autre
OriginalL'auteur xval
À la recherche à la stacktrace c'est une exception levée par Hystrix après l'210 secondes vous avez défini ci-dessus.
Comme
TimeoutException
est un checked exception qui doit être déclaré sur chaque méthode qui pourrait lever cette exception. Vous voyez cette déclarée dans lerun()
méthode de votre code.Vous pouvez déboguer ce comme tout autre programme, mais sachez que le
run()
méthode s'exécute dans un thread distinct de celui de l'appelant. Après 210 secondes, l'appelant tout simplement continuer malgré votre session de débogage.C'est mon code. Comme je l'ai dit c'est un maillot client<code>@Override protected FetchProvisionedIdsResponse run() throws Exception { ClientResponse réponse = client.ressource(buildUri()) .get(ClientResponse.class); return réponse.getEntity(MyResponse.class);</code> }
Vous avez déclaré
Exception
dans la méthode, un bon style, est de le réduire. À partir de la description de l'API, je vois queget()
va jeter unUniformInterfaceException
, mais pas deTimeoutException
. Par conséquent, il est Hystrix lancer cette exception.OriginalL'auteur ahus1
Vous devez augmenter ur reste client httpclient readTimeout propriété
OriginalL'auteur Pushpak Jain