OpenFeign超时控制
2024-01-09 06:41:34
OpenFeign超时控制
前面简单介绍了Feign和OpenFeign的关系,言归正传,接下来我们看看OpenFeign如何设置调用超时,openFeign其实是有默认的超时时间的,默认分别是连接超时时间10秒、读超时时间60秒,源码在feign.Request.Options#Options()这个方法中。
Feign的原理
虽然有了接口,但是仅仅有接口是不够的,因为接口又不能创建对象,我们得需要对象。
Feign为了方便我们为接口创建对象,提供的Feign.Builder这个内部类
OpenFeign 超时场景
默认Feign 客户端只等待1秒钟,但是服务端处理需要超过1秒钟,导致Feign 客户端不想等待了,直接返回报错
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制
一、服务提供方8001写暂停程序模拟调用超时
在cloud-provider-payment8001 模拟调用超时
//模拟openfegin调用超时
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout() {
// 业务逻辑处理正确,但是需要耗费3秒钟
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return serverPort;
}
二、服务消费方80添加方法
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout();
}
三、服务消费方80添加超时方法
@RestController
@Slf4j
public class OrderFeignController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeignTimeout() {
// OpenFeign客户端一般默认等待1秒钟
return paymentFeignService.paymentFeignTimeout();
}
}
四、测试
OpenFeign 只等待1秒,超过后报错:
五、在 yml 配置超时控制
openFeign 内与 ribbon 整合了,支持负载均衡,它的超时控制也由最底层的 ribbon 进行控制,yml 添加配置:
#设置feign 客户端超时时间(openFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
重启80后 测试
数据在3秒后返回,没有报错。
OpenFeign 默认是1秒钟,部分业务时间长了可以通过这个方法进行设置
文章来源:https://blog.csdn.net/qq_40428665/article/details/135469174
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!