1魔招、簡介
Feign是Netflix開發(fā)的聲明式、模板化的HTTP客戶端, Feign可以幫助我們更快捷眯牧、優(yōu)雅地調(diào)用HTTP API蹋岩。
在Spring Cloud中,使用Feign非常簡單——創(chuàng)建一個接口学少,并在接口上添加一些注解剪个,代碼就完成了。Feign支持多種注解版确,例如Feign自帶的注解或者JAX-RS注解等扣囊。
Spring Cloud對Feign進(jìn)行了增強(qiáng),使Feign支持了Spring MVC注解阀坏,并整合了Ribbon和Eureka如暖,從而讓Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign實(shí)現(xiàn)忌堂,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供這兩者的強(qiáng)大功能外酗洒,還提供了一種聲明式的Web服務(wù)客戶端定義的方式士修。
2、導(dǎo)入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--由于feign整合了ribbon的負(fù)載均衡樱衷,所以需要引入ribbon的依賴?-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<!--需要從eureka拉取服務(wù)?-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
3棋嘲、啟動類添加注解支持
@EnableFeignClients
4、客戶端編寫
//定義接口
package com.sun.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(value = "user-service") //聲明這是feign的客戶端
public interface UserFeignClient {
@GetMapping("user")
public String getUser();
}
注釋:
這是一個接口矩桂,F(xiàn)eign會通過動態(tài)代理沸移,幫我們生成實(shí)現(xiàn)類。這點(diǎn)跟mybatis的mapper很像
@FeignClient侄榴,聲明這是一個Feign客戶端雹锣,類似@Mapper注解。同時(shí)通過value屬性指定服務(wù)名稱
接口中的定義方法癞蚕,完全采用SpringMVC的注解蕊爵,F(xiàn)eign會根據(jù)注解幫我們生成URL,并訪問獲取結(jié)果
改造原來的調(diào)用邏輯桦山,不再調(diào)用UserDao:
//實(shí)現(xiàn)調(diào)用
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("feign")
public Object feign(){
return userFeignClient.getUser();
}
5攒射、feign自動實(shí)現(xiàn)負(fù)載均衡
6、feign的重試
#feign的重試與ribbon的配置相同恒水,只要添加相應(yīng)的配置即可会放。
client:
ribbon:
MaxAutoRetries: 1 #配置首臺服務(wù)器重試1次
MaxAutoRetriesNextServer: 2#配置其他服務(wù)器重試兩次
ConnectTimeout: 500 #鏈接超時(shí)時(shí)間
ReadTimeout: 2000 #請求處理時(shí)間
OkToRetryOnAllOperations: true #每個操作都開啟重試機(jī)制
7、feign與hystrix的集成配置熔斷機(jī)制
a钉凌、 添加熔斷配置
feign:
hystrix:
enabled: true #允許熔斷
b咧最、添加熔斷處理類
//實(shí)現(xiàn) UserFeignClient接口
@Component
public class UserFeignClientImpl implements UserFeignClient {
@Override
public String getUser() {
return "訪問人數(shù)過多";
}
}
c、實(shí)現(xiàn)調(diào)用
@FeignClient(value = "user-service",fallback = UserFeignClientImpl.class) //聲明這是feign的客戶端 fallback 哪個出現(xiàn)訪問延遲 就調(diào)用哪個方法的實(shí)現(xiàn)返回處理結(jié)果
public interface UserFeignClient { //接口定義
@GetMapping("user")
public String getUser();
}
//調(diào)用
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("feign")
public Object feign(){
return userFeignClient.getUser();
}