SpringClound——Feign和OpenFeign區別和OpenFeign的使用

Feign和OpenFeign的主要區別如下圖

在這裏插入圖片描述

那我們怎麼使用OpenFeign呢?

1:OpenFeign服務調用

pom.xml

 <!-- OpenFeign -->
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

PaymentService .java

public interface PaymentService {
    public int create(Payment payment);
    public Payment getPaymentById(@Param("id") Long id);
}

OrderFeignController .java

@RestController
@Slf4j
public class OrderFeignController {

    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping("/consumer/feign/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
        return paymentFeignService.getPaymentById(id);
    }

    @GetMapping("/consumer/feign/payment/timeout")
    public String getPaymentById() {
        // openfeign-ribbon,客戶端默認等待1秒鐘
        return paymentFeignService.paymentFeignTimeout();
    }
}

application.yml

server:
  port: 80

spring:
  application:
    name: cloud-order-feign-service

eureka:
  client:
    # true表示將自己註冊進Eureka Server,默認爲true
    register-with-eureka: true
    # 是否從Eureka Server抓取以有的註冊信息,默認爲true。單節點無所謂,集羣必須設置爲true才能配合Ribbon使用負載均衡
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka

2:OpenFeign超時控制

  • 超時控制介紹·
    默認Feign客戶端只等待一秒鐘,但是服務靄處理需要超過1秒,導致Feign客戶端不想等待了,直接返回報錯。爲了避免這樣的情況,有時候我們需要設置Feign客戶端的超時控制。
  • 解決方法
    ym|文件中開啓配置

application.yml

# 設置feign客戶端超時時間(OpenFeign默認支持Ribbon)
ribbon:
  # 指的是建立連接後從服務器讀取到可用資源所用時間
  ReadTimeout: 5000
  # 指的是建立連接所用的時間,適用於網絡狀況正常的情況下,兩端連接所用的時間
  ConnectTimeout: 5000

麼配置上面的yml文件時,如果我們調用如下的方法
會報錯

 @GetMapping("/feign/timeout")
    public String paymentFeignTimeout() {
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return serverPort;
    }

在這裏插入圖片描述
配置了,就會出現以下結果
在這裏插入圖片描述

3:OpenFeign日誌增強

  • Feign提供了日誌打印功能,我們可以通過配置來調整日誌級別,從而瞭解Feign中Http請求的細節。說白了就是對Feign接口的調用情況進行監控和輸出
  • 日誌級別
    1:NONE:默認的,不顯示任何日誌;
    2:BASIC:僅記錄請求方法、URL、 響應狀態碼及執行時間;
    3:HEADERS:除了BASIC中定義的信息之外,還有請求和響應的頭信息;
    4:FULL:除了HEADERS中定義的信息之外,還有請求和響應的正文及元數據。

怎麼使用日誌?
第一步:FeignConfig.java

@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

第二步:application.yml

logging:
  level:
    # feign日誌已什麼級別監控哪個接口
    com.atguigu.springcloud.service.PaymentFeignService: debug

第三步:測試該接口下的方法,得到如下日誌
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章