场景

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

 

 

posted on 2022-05-18 16:48  霸道流氓  阅读(720)  评论(0编辑  收藏  举报