• SpringCloud中集成OenFeign时设置请求服务超时时间


    场景

    SpringCloud中集成OpenFeign实现服务调用:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124822349

    在上面实现使用OpenFeign进行服务调用之后。

    默认Feign客户端只等待一秒钟,但是如果服务端处理超过1秒钟时就会导致Feign客户端不想等待

    了,直接返回报错。为了避免这种情况,有时需要设置Feign客户端的超时控制。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    1、找到前面服务消费者的application.yml

    设置feign客户端超时时间

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

    完整pom文件

    server:
      port: 88
    
    eureka:
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
    
    #设置feign客户端超时时间(OpenFeign默认支持ribbon)
    ribbon:
      #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
      #指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000

    2、为了测试该中响应时间长场景下,在服务提供者8001服务上新增

    一个接口,不进行任何逻辑,只是让其耗费3秒钟。

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

    3、然后在服务消费者,Feign客户端的service调用添加对该服务的调用

    package com.badao.springclouddemo.service;
    
    
    import com.badao.springclouddemo.entities.CommonResult;
    import com.badao.springclouddemo.entities.Payment;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    
    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
    public interface PaymentFeignService
    {
        @GetMapping(value = "/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
    
        @GetMapping(value = "/payment/feign/timeout")
        public String paymentFeignTimeout();
    }
    
    再在Controller调用该service
    
        @GetMapping(value = "/consumer/payment/feign/timeout")
        public String paymentFeignTimeout()
        {
            // OpenFeign客户端一般默认等待1秒钟
            return paymentFeignService.paymentFeignTimeout();
        }

    4、再次访问该接口进行测试

  • 相关阅读:
    bzoj4537: [Hnoi2016]最小公倍数
    bzoj4331: JSOI2012 越狱老虎桥
    bzoj4558: [JLoi2016]方
    bzoj4209: 西瓜王
    bzoj2653: middle
    bzoj4671: 异或图
    bzoj4771: 七彩树
    shell java应用启动脚本(app.sh)
    Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误
    MariaDB(Mysql)-主从搭建
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/16285305.html
Copyright © 2020-2023  润新知