最近在学习springcloud微服务,在使用openfeign时,需要使用ribbon组件的ConnectTimeOut和ReadTimeOut功能,代码示下:
@GetMapping(value = "/payment/feign/timeOut")
public String paymentTimeOut(){
//设定暂停3秒,openFeign默认等待时间一秒
TimeUnit.SECONDS.sleep(3);
}catch (Exception e){
e.printStackTrace();
return serverPort;
##设置feign客户端的超时时间
#ribbon:
# #简历连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
ConnectTimeOut: 5000
# #指建立连接后从服务端读取到可用资源所用的时间
ReadTimeOut: 10000
但是使用中发现ribbon组件的ConnectTimeOut和ReadTimeOut功能并没有生效,报错代码示下:
Read timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/feign/timeOut
feign.RetryableException: Read timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/feign/timeOut
查找maven导的依赖发现ribbon包冲突了,所以我选用feign里面的ribbon:
feign:
client:
config:
default:
#简历连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
ConnectTimeOut: 5000
#指建立连接后从服务端读取到可用资源所用的时间
ReadTimeOut: 10000
成功解决!!!!!!!!!!!
关于ribbon组件的ConnectTimeOut和ReadTimeOut功能失效问题处理
这几天在自学SpringCloud学到Feign的时候需要验证超时问题,使用配置ribbon.ConnectTimeOut与ReadTimeOut无效。
百度后说了一大堆,很多都是新写配置类乱七八糟的处理。
原先就能配置的东西为什么要用配置类去实现,然后我稍微换个思路寻找后发现下面这个配置可以使用。
为了防止有人不会点击复制,直接用Ctrl+C会有乱七八糟的其他内容,这边直接贴原文。
feign:
client:
源码在这里 可以看到默认设置是default 整个配置地址是
feign.client.config.default
#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
ConnectTimeOut: 6000
#指建立连接后从服务端读取到可用资源所用的时间
ReadTimeOut: 10000
feign:
#禁用Eureka后手动配置服务地址
smile-eureka-server.ribbon.listOfServers=localhost:8081,localhost:8083
其中smile-eureka-serve是要配置的服务名称
3、配置负载均衡策
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秒,最开始我自己不设置超时时
在使用Spring Cloud 的时候,都会用到Ribbon做负载均衡,使用Feign 简化web 服务调用,在使用的过程中,网络服务是不稳定,所有要设置超时时间,避免服务端响应慢影响调用的服务,网络可能偶尔不稳定,重试机制能增加成功的几率。...
ConnectTimeout: 80000
具体键值可以参考类CommonClientConfigKey,这个类涉及到常见的客户端配置属性,另外一个类是DefaultClientC...
Ribbon是由Netflix开发的一款基于HTTP和TCP的负载均衡的开源软件。我们可以直接给Ribbon配置好服务列表清单,也可以配合Eureka主动的去获取服务清单,需要使用到这些服务的时候Ribbon通过轮询或者随机等均衡算法去获取服务。