Spring Cloud 实战三:超时机制

目前为止,已经搭建了简单的微服务框架,这时我们不得不考虑,如果服务超时我们应该怎么处理。
一、为什么要设置超时机制
1、客户端请求一个服务提供者,而 服务提供者响应非常缓慢,这时就会强制客户端等待,直到服务提供者完成响应。
2、在服务提供者响应完成之前,客户端的线程/进程得不到释放,如果大量请求未及时响应,就会造成客户端服务器资源耗尽。
二、超时配置

1、使用RestTemplate 模版,超时配置。

@SpringBootApplication
@EnableEurekaClient
public class ServiceUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceUserApplication.class, args);
    }
    /**
     *  向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
     * @return
     */
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory  = new SimpleClientHttpRequestFactory ();
        simpleClientHttpRequestFactory.setConnectTimeout(60000);
        simpleClientHttpRequestFactory.setReadTimeout(60000);
        return new RestTemplate(simpleClientHttpRequestFactory);
    }
}

这里配置的60秒。

我们在服务端service-user(端口为9001)中使响应超时

@RestController
@RequestMapping("/user/")
public class UserController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("sayHello")
    public String getUser(@RequestBody String say) throws InterruptedException {
        Thread.sleep(120000L);
        return say + " say hello! port=" + port;
    }
}

这时调用服务:service-user 9001 则回抛超时异常。


如果负载均衡之后调用的9002(未超时),则成功。

2、ribbon设置超时。

看源码可知默认超时时间为2000毫秒


1、配置文件,配置超时时间

#请求超时

ribbon.ReadTimeout: 60000

#连接超时时间

ribbon.ConnectTimeout: 60000


这样,60秒之后会报超时异常


以上配置数据全局配置:可加上具体服务名称进行局部配置

SERVICE-USER.ribbon.ReadTimeout: 60000
SERVICE-USER.ribbon.ConnectTimeout: 60000

既在调用SERVICE-USER服务的时候才会生效。

2、使用@Bean配置超时

"ribbon.ReadTimeout”改为“SERVICE-USER.ribbon.ReadTimeout” 既进行了局部配置

@Bean
Request.Options requestOptions(ConfigurableEnvironment env){
    int ribbonReadTimeout = env.getProperty("ribbon.ReadTimeout", int.class, 60000);
    int ribbonConnectionTimeout = env.getProperty("ribbon.ConnectTimeout", int.class, 60000);

    return new Request.Options(ribbonConnectionTimeout, ribbonReadTimeout);
}
最后:github地址: https://github.com/houxi1234/demo.git
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值