我们将Spring Boot 2.0.0.RELEASE与spring-cloud-starter-netflix-ribbon一起用于我们的微服务。我将ribbon.readTimeout=1000
设置为慢速请求,并在@GetMapping方法中使用我们的微服务设置断点进行检查,而不发送响应。在我的测试中,我一直在等待10分钟,并且没有任何异常。似乎根本没有readTimeout。
服务配置
ribbon:
ReadTimeout: 1000
my-service:
ribbon:
eureka:
enabled: false
listOfServers: localhost:8080
ReadTimeout: 1000
ConnectTimeout: 1000
a使其起作用的唯一方法是ribbon.restclient.enabled=true
。但是此客户端已被弃用,我不会使用它。
答案 0 :(得分:1)
在与Spring RestTemplate
一起使用时,spring-cloud-netflix并不支持所有功能区属性。如docs中所述,有些功能区属性有效,但是ReadTimeout
不是其中之一。因此它不起作用,而是通过设计(根据对此issue的响应)进行的。但是,如果您使用的是Spring的RestTemplate
,则可以直接在此处进行设置,例如:
@LoadBalanced
@Bean
RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.setReadTimeout(2000)
.build();
}
答案 1 :(得分:0)
我们找到了:
serviceA.ribbon.ReadTimeout=8000
使用弹簧云2.1.0.RELEASE
和
Finchley.SR2
配合良好
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
但是,我们在客户端中通过伪装使用功能区:
@FeignClient(value = "serviceA")
public interface ServiceAClient {
@GetMapping(value = "/test")
String getTest();
}
然后,我们使用Wiremock测试在读取超时之上引入固定的延迟,以验证其是否可以正常工作。
答案 2 :(得分:0)
我认为您需要配置Hystrix超时。看一下文档的这一部分:http://cloud.spring.io/spring-cloud-static/Edgware.RELEASE/single/spring-cloud.html#_hystrix_timeouts_and_ribbon_clients 可能是这样的:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 1100
ribbon:
ConnectTimeout: 1000
ReadTimeout: 1000