ribbon设置url级别的超时时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ribbon设置url级别的超时时间相关的知识,希望对你有一定的参考价值。

参考技术A ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间。这里hack一下,实现url基本的ribbon超时时间设置。具体的思路就是重写RibbonApacheHttpRequest的toRequest方法,然后进行设置。

走网关的话,有三层的超时时间,一个是zuul的,一个是ribbon的,还有一个是hystrix的。hystrix的超时设置,AbstractRibbonCommand这个类没有暴露设置hystrix的Setter方法出来,所以无法通过继承的方式来扩展。因此要自定义ribbon超时的话,需要这个超时时间是小于hystrix的,不然就提前被hystrix超时了,无法起到效果。

Ribbon超时设置

参考技术A 一、简单说一下目前的系统

1.注册中心shop-eureka

2.网关shop-gateway

3.业务系统shop-business

4.用户服务shop-user-center

二、问题,现在我是在shop-bussiness系统中使用feign调用shop-user-center的接口

1.shop-user-center

2.shop-business中的feign接口:

3.shop-business中的feign接口使用

可以看出在图一中我设置sleep时间为7秒,最开始我自己不设置超时时间,在图上调用的时候肯定是报超时错误:java.util.concurrent.TimeoutException: null。

三、设置超时

1.在shop-gateway的application.properties中添加配置,设置的ReadTimeout是8秒,网上看的,说是全局设置:

ribbon.ReadTimeout=8000

ribbon.ConnectTimeout=6000

测试结果:java.util.concurrent.TimeoutException: null

2.在shop-gateway中application.properties添加配置:

ribbon.ReadTimeout=8000

ribbon.ConnectTimeout=6000

测试结果:java.util.concurrent.TimeoutException: null

3.在调用方shop-business中application.properties添加配置:

ribbon.ReadTimeout=8000

ribbon.ConnectTimeout=6000

测试结果:java.util.concurrent.TimeoutException: null

4.在调用方shop-business中application.properties添加配置:

shop-user-center.ribbon.ReadTimeout=8000

shop-user-center.ribbon.ConnectTimeout=6000

测试结果:成功。

四、总结

1.feign是客户端调用,shop-business是feignclient,所以在shop-business设置超时时间。

五、问题

1.如何设置全局超时时间?

以上是关于ribbon设置url级别的超时时间的主要内容,如果未能解决你的问题,请参考以下文章

Ribbon超时设置

Feign Client超时时间配置以及单独给某接口设置超时时间方法记录

Open Feign 超时 Ribbon 超时 相关内容

tomcat下部署多个项目,配置文件中的ribbon超时不生效是啥原因?

springcoud feign超时的问题

feginclient和ribbon的重试策略