OpenFeigin服務接口調用

一、簡介

1、OpenFeign簡介

​ Feign 是一個聲明式WebService客戶端。使用Feign能讓編寫Web Service客戶端更加簡單。它的使用方法是定義一個服務接口然後在上面添加註解。具有可插入註釋支持,包括Feign註釋和JAX-RS註釋;支持可插拔式的編碼器和解碼器。Spring Cloud 對Feign進行了封裝,使其支持了SpringMVC標準註解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支持負載均衡。官方文檔地址:https://cloud.spring.io/spring-cloud-openfeign/reference/html/ 。

2、Feign 與OpenFeign 的區別

  • Feign 是SpringCloud組件中的一個輕量級RESTful的HTTP服務客戶端,內置了Ribbon,用來做客戶端負載均衡,去調用服務註冊中心的服務。Feign的使用方式:使用Feign的註解定義接口,調用這個接口就可以調用服務註冊中心的服務。

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    
  • OpenFeign是SpringCloud在Feign的基礎上支持了SpringMVC的註解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping註解下的接口,並通過動態代理的方式產生實現類,實現類中做負載均衡並調用其他服務。

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    

二、OpenFeign使用步驟

1、建立一個新模塊,在pom文件中引入Feign的依賴

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、在主啓動類上加註解 @EnableFeignClients 開啓Feign;

3、在消費者端創建一個接口,接口中的方法是服務提供者中的方法;

@Component
//添加Feign註解,value=要尋找的微服務名稱
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping("/payment/get/{id}")
    CommonResult getPaymentById(@PathVariable("id") Long id);
}

4、定義自己的業務類,調用 Feign 接口中的方法即可,不用在手動的去引入RestTempLate。

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

三、OpenFeign超時控制

1、描述

​ 消費者方與服務提供方之間對於服務的請求處理時間存在時間差,會超時導致程序報錯。爲解決這個問題,需要雙方對於某些業務進行一些約定,保證程序正常運行。超時請求報錯頁面如下:

2、超時設置,在消費端的application.yml添加以下配置。

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

四、OpenFeign 日誌打印

1、Feign 提供了日誌打印功能,可以通過配置來調整日誌級別,從而瞭解Feign中的Http請求的細節,對接口的調用情況進行監控和輸出。

2、日誌級別

  • NONE:默認的,不顯示任何日誌;
  • BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間;
  • HEADERS:處了Basic中定義的信息之外,還有請求和響應的頭信息;
  • FULL:處了HEADERS中定義的信息之外,還有請求和響應的正文及元數據。

3、配置方法

  • 定義一個配置類

    @Configuration
    public class FeignConfig {
    
        @Bean
        Logger.Level feignLoggerLevel(){
            return Logger.Level.FULL;
        }
    }
    
  • 修改yml文件

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

案例代碼地址:https://github.com/xhanglog/springcloud-learning

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