发生HystrixTimeoutException时java请求未中断
我有一个简单的Eureka服务器、配置服务器、Zuul网关和一个在Eureka中注册的测试服务(下面称为aService)。 此外,还注册了FallbackProvider的一个实现,默认命令的timeoutin毫秒数为10000
我向一个服务发送了一个请求,在该服务中,我将睡眠15秒,并每秒打印一次记号。10秒后,发生HystrixTimeoutException并访问了我的自定义fallbackResponse,但滴答声仍然持续到15秒结束
显然,我的问题是,为什么请求没有被打断?有人能解释一下hystrix和zuul在HystrixTimeout之后做了什么吗
依赖项版本:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons-dependencies</artifactId>
<version>Edgware.SR2</version>
</dependency>
<dependency>
<groupId>com.netflix.zuul</groupId>
<artifactId>zuul-core</artifactId>
<version>1.3.0</version>
</dependency>
我的一些hystrix配置:
zuul.servletPath=/
hystrix.command.default.execution.isolation.strategy=THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
hystrix.command.aService.execution.isolation.strategy=THREAD
ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=3000
我的一些后备提供商:
@Component
public class ServerFallback implements FallbackProvider {
@Override
public String getRoute() {
return "*";
}
@Override
public ClientHttpResponse fallbackResponse() {
// some logs
return simpleClientHttpResponse();
}
@Override
public ClientHttpResponse fallbackResponse(Throwable cause) {
// some logs
return simpleClientHttpResponse();
}
}
``
# 1 楼答案
将zuul与ribbon一起使用时(默认),HytrixCommandProperties中的executionIsolationStrategy将被AbstractRibbonCommand覆盖,默认情况下,AbstractRibbonCommand是信号量。在这种隔离策略中,请求不会立即中断。见ZuulProxy fails with “RibbonCommand timed-out and no fallback available” when it should do failover