一、簡介
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