• 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、再次访问该接口进行测试

  • 相关阅读:
    2014华为员工年终奖及年薪盘点
    Gradle命令行黑魔法
    委托的那些事
    动态代理
    音乐播放
    Eclipse plugin web site 发布和版本更新
    JavaScript—之对象参数的引用传递
    Bootstrap 3 How-To #1 下载与配置
    代码审计和漏洞挖掘的思路
    核心C#
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/16285305.html
Copyright © 2020-2023  润新知