SpringCloud(15)——OpenFeign超时控制

SpringCloud(15)——OpenFeign超时控制,第1张

在分布式系统,如果我们的消费者调用一个处理时间很长的提供者的接口,还没等提供者处理完,消费者就超时了,这时候改怎么解决呢。

在服务提供者的controller里新增一个方法,没有业务逻辑,只是睡3s。

Feign接口里需要新增一个调用提供者的方法,注意要和上面的方法一致。

消费者controller新增一个调用feign的方法

这样我们的环境就准备好啦

先测试一下8001,看看自测是否通过

等待了3秒钟,我们看到访问成功,自测没问题!

接着我们通过消费者来测试

我们可以看到,通过消费者来访问,就会报超时,可是提供者只是处理的慢,并没有其他问题。

这就需要设置Feign客户端的超时时间来控制了

设置超时时间只需要在yml配置文件中配置即可

添加好配置后,我们再重启

这次就不会再出现超时的情况了。

问题根源有二:

1):业务耗时时间比较长,超过服务调用超时时间配置,由于Spring Cloud 服务调用超时重试机制默认开启,所以会导致服务被调用了两次。

2):服务端未做幂等性,导致重复的业务处理。

增大配置超时时间

ribbon.ReadTimeout=10000

ribbon.ConnectTimeout=10000

eureka服务调用重试开关的配置属性:

默认开启。

重试机制:对于连接超时的异常,feign都会触发重试机制,对于读取超时,会根据请求类型判断,如果是GET异常,触发重试;其他异常,不会触发重试。

服务响应超时时间,默认5s,连接的超时时间为2s。

同一实例最大重试次数为1

负载均衡的其他实例的重试次数为2

对所有 *** 作请求都进行重试,默认false,建议不要开启。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11348912.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存