近期用Spring cloud 开发微服务架构时候,在服务与服务之间调用调试代码时候,出现链接超时。
错误信息:
Read timed out executing GET http://service-batch/batchmanagement/datatransfer/querybyplanid?planid=PL00000102。
发生原因:
用IDE开发Debug模式调试代码时候,在处理该服务与其他服务调用时候,由于debug模式调试代码花费一些时间,结果出现Fegin 连接超时问题。
解决办法:
在application.properice属性文件中添加
#Fegin 连接超时
ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=60000
ribbon.MaxAutoRetries=0
ribbon.MaxAutoRetriesNextServer=1
技术讲解:
微服务间调用其实走的是http请求,debug了一下默认的ReadTimeout时间为5s,ConnectTimeout时间为2s,
我使用的是Fegin进行微服务间调用,底层用的还是Ribbon。
微服务
治理
Spring
Cloud
工具套件为
微服务
治理提供了全面的技术支持。这些治理工具主要包括服务的注册与发现、负载均衡管理、动态路由、服务降级和故障转移、链路跟踪、服务监控等。
微服务
治理的主要功能组件如下:
注册管理服务组件Eureka,提供服务注册和发现的功能。
负载均衡服务组件
Ribbon
,提供负载均衡调度管理的功能。
边缘代理服务组件Zuul,提供网关服务和动态路由的功能。
断路器组件Hystrix,提供容错机制、服务降级、故障转移等功能。
聚合服务事件流组件Turbine,可用来
在使用
Spring
Cloud
进行服务间调用时出现
连接
超时
的错误,错误信息:
Read
time
d
ou
t executing GET http://service-batch/batchmanagement/datatrans
fe
r/querybyplanid?planid=PL00000102。
用idea开发debug模式调试代码时,在处理服务间调用时,由于debug模式调试代码花费...
#
Ribbon
允许最大
连接
数,即所有后端
微服务
实例请求并发数之和的最大值。
MaxTotalConnections: 500
#单个后端
微服务
实例能接收的最大请求并发数
MaxConnectionsPerHost: 500
Read
Timeout
: 2000
Connect
Time
ou
...
最近在学习
spring
cloud
微服务
,在使用open
fe
ign时,需要使用
ribbon
组件的Connect
TimeOut
和
Read
TimeOut
功能,代码示下:
@GetMapping(value = "/payment/
fe
ign/
timeOut
")
public String payment
TimeOut
(){
//设定暂停3秒,open
Fe
ign默认等待时间一秒
Time
Unit.SECONDS.sleep(3
前段产品自测阶段,发现了一个令人头疼的
问题
,服务启动之后,总是在一段时间之内
time
ou
t。扒拉了许久代码,发现是网关中
ribbon
的
超时
配置不管用,还是默认配置,而本地环境启动访问太多,总是时不时就
超时
了。于是,决定深入研究一下。
配置如下:
ribbon
:
httpclient:
enabled: true
max-connection...
通过 查看
spring
-
cloud
-netflix-
ribbon
下的配置类
Ribbon
ClientConfiguration 这个类,可以看到DEFAULT_CONNECT_
TIMEOUT
=1000即默认
连接
超时
时间是1秒,DEFAULT_
READ
_
TIMEOUT
= 1000,读取数据
超时
时间为1秒。
@SuppressWarnings("deprecation")
@Configuration
@EnableConfigurationProperties
//Order is important h
关于
ribbon
组件的Connect
TimeOut
和
Read
TimeOut
功能失效
问题
处理
这几天在自学
Spring
Cloud
学到
Fe
ign的时候需要验证
超时
问题
,使用配置
ribbon
.Connect
TimeOut
与
Read
TimeOut
无效。
百度后说了一大堆,很多都是新写配置类乱七八糟的处理。
原先就能配置的东西为什么要用配置类去实现,然后我稍微换个思路寻找后发现下面这个配置可以使用。
为了防止有人不会点击复制,直接用Ctrl+C会有乱七八糟的其他内容,这边直接贴原文。
fe
ign:
client:
3.业务系统shop-business
4.用户服务shop-user-center
二、
问题
,现在我是在shop-bussiness系统中使用
fe
ign调用shop-user-center的接口
1.shop-user-center
2.shop-business中的
fe
ign接口:
3.shop-business中的
fe
ign接口使用
可以看出在图一中我设置sleep时间为7秒,最开始我自己不设置
超时
时