消费者去掉用服务者一定会存在超时

所以两个需要约定好

1、超时设置,故意设置超时演示出错情况

服务提供方8001故意写暂停程序

  1. @GetMapping(value = "/payment/feign/timeout")
  2. public String paymentFeignTimeout(){
  3. //暂停几秒钟线程
  4. try {
  5. TimeUnit.SECONDS.sleep(3);
  6. } catch (InterruptedException e) {
  7. e.printStackTrace();
  8. }
  9. return serverPort;
  10. }

服务消费方80添加超时方法PaymentFeignService

  1. @Component
  2. @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
  3. public interface PaymentFeignService {
  4. @GetMapping("/payment/get/{id}")
  5. CommonResult getPaymentById(@PathVariable("id") Long id);
  6. @GetMapping(value = "/payment/feign/timeout")
  7. String paymentFeignTimeout();
  8. }

服务消费方80假超时方法OrderFeignController

  1. @GetMapping(value = "/consumer/payment/feign/timeout")
  2. public String paymentFeignTimeout(){
  3. //openfeign-ribbon,客户端一般默认等待1秒钟
  4. return paymentFeignService.paymentFeignTimeout();
  5. }

测试:

http://localhost/consumer/payment/feign/timeout

错误页面

image.png

2、OpenFeign默认等待1秒钟,超过后报错

image.png

3、是什么

默认Feign客户端只等待一秒钟,但是服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错了。
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。

4、YML文件里需要开启OpenFeign客户端超时控制

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

https://www.reinforce.cn/t/638.html

会设置最小的