OpenFeign超时控制

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 模拟调用超时

OpenFeign超时控制_第1张图片

 //模拟openfegin调用超时
    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout() {
        // 业务逻辑处理正确,但是需要耗费3秒钟
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return serverPort;
    }

二、服务消费方80添加方法

OpenFeign超时控制_第2张图片

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {

    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout();
   
}

三、服务消费方80添加超时方法

OpenFeign超时控制_第3张图片

@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秒,超过后报错:

OpenFeign超时控制_第4张图片

五、在 yml 配置超时控制

OpenFeign超时控制_第5张图片openFeign 内与 ribbon 整合了,支持负载均衡,它的超时控制也由最底层的 ribbon 进行控制,yml 添加配置:

#设置feign 客户端超时时间(openFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

重启80后 测试

OpenFeign超时控制_第6张图片数据在3秒后返回,没有报错。

OpenFeign 默认是1秒钟,部分业务时间长了可以通过这个方法进行设置

你可能感兴趣的:(springcloud,spring,cloud)