I noticed Spring-Cloud ZUUL forces the execution isolation to SEMAPHORE instead of the THREAD defaults (as recommended by Netflix).
A comment in org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand
says:
we want to default to semaphore-isolation since this wraps 2 others commands that are already thread isolated
But still I don't get it :-( What are those two other commands?
Configured this way, Zuul can only sched load but does not allow for timing out and let the client walk away. In short, even if the Hystrix timeout is set to 1000ms, clients will only be released once the call forwarded to the service down the chain returns (or timeouts because of a ReadTimeout for instance).
I tried to force THREAD isolation by overriding the configuration (per service unfortunately, since the default is forced in the code) and everything seems to work as expected. However, I'm not keen in doing this without proper understanding of the implications - certainly in regards of the comment found in the code and the defaults adopted by the Spring Cloud version of Zuul.
Can someone provide more information? Thx
org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand
, the timeout is handled by the 2 methods it wraps. I'm guessing one of those is a Ribbon command, so the timeouts can be set byribbon.connectTimeout
andribbon.readTimeout
– Ceylon