OpenFeign超时控制

 在上一篇的OpenFeign服务调用中,虽然可以使用OpenFeign来实现服务之间的调用,但是一旦调用提供服务方的时候超时就会报错;所以这里就需要了解到OpenFeign的超时控制。

在提供服务端暴露一个接口,设置睡眠3秒钟,方便测试

@Value("${server.port}")
    private String serverPort;

// 返回端口号
@GetMapping(value = "/feign/timeout")
    public String paymenyFeignTimeout()
    {
        try
        {
            TimeUnit.SECONDS.sleep(3);
        }catch (Exception e){
            e.printStackTrace();
        }
        return serverPort;
    }

然后在调用方的接口新增接口 相对应

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService
{
    @GetMapping(value = "/better/payment/feign/timeout")
    String paymentFeignTimeout();
}

controller实现

    @GetMapping(value = "/consumer/payment/feign/timeout")
    public String paymentFeignTimeout()
    {
        String result = paymentFeignService.paymentFeignTimeout();
        return result;
    }

分别启动eureka、提供服务端、调用端,网页中输入localhost/consumer/payment/feign/timeout测试会发现3秒后会报错

OpenFeign超时控制_第1张图片

因为OpenFeign默认的超时为1秒,我们设置了睡眠时间为3秒,所以会报错。

但是我们可以根据业务的需求,手动设置超时控制的时间。

openFeign中整合了ribbon,它的超时控制是由ribbon 进行控制的

OpenFeign超时控制_第2张图片

 在yml中添加配置项,设置为5秒大于之前设置的睡眠时间(3秒)

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

注意:如果没有生效的话就去看一下引入的包是否冲突了,包名后带(omitted for duplicate)的字样就说明包有冲突,根据自己的情况调整版本。

OpenFeign超时控制_第3张图片

yml配置好后,重启一下调用端,再进行测试

 OpenFeign超时控制_第4张图片

调用成功,通了~ 

你可能感兴趣的:(java,eureka,ribbon)