I've been playing around with Netflix OSS Hystrix and I am now exploring different configurations and possibilities to include it in my project. Among other things, my application needs to do network calls in HystrixCommand.getFallBack()
...
Now, I read that it is best-practice NOT to do network calls there and instead provide some generic answer (see Hystrix Wiki) and if it is really necessary to do this, one should use HystrixCommand
or HystrixObservableCommand
.
My question is, if I use HystrixCommand
should I invoke it e.g., with HystrixCommand.run()
or HysrixCommand.queue()
or some other option?
Also, in my logs I've noticed that getFallBack()
can have different calling threads (e.g., Hystrix-Timer, I guess this depends who interrupted the run method). Here I would like to know how shell calling HystrixCommand.run()
from the fallback affect my performance, since the calling thread will be alive and blocked until that command finishes?
EDIT: With the fresh eyes on the problem, I am now thinking that the "generic answer" (mentioned above) could be some form of Promise
i.e., CompletableFuture<T>
in Java terminology. So returning the promise from the HystrixCommand.run()
would allow the calling thread (Hystrix internal) to return immediately, thus releasing it. However now I am stuck on implementing this behavior. Any ideas?
Thanks a lot for any help!
Use a HystrixCommand's execute method. Example:
If you want to work with async "promises" then you should probably implement a HystrixObservableCommand.