1。 什麼是Feign
Netflix Feign 是 Netflix 公司釋出的一種實現負載均衡和服務呼叫的開源元件。Spring Cloud 將其與 Netflix 中的其他開源服務元件(例如 Eureka、Ribbon 以及 Hystrix 等)一起整合進 Spring Cloud Netflix 模組中,整合後全稱為 Spring Cloud Netflix Feign Feign 對 Ribbon (
http://c。biancheng。net/springcloud/ribbon。html
)進行了整合,利用 Ribbon 維護了一份可用服務清單,並透過 Ribbon 實現了客戶端的負載均衡。Feign 是一種宣告式服務呼叫元件,它在 RestTemplate 的基礎上做了進一步的封裝。透過 Feign,我們只需要宣告一個介面並透過註解進行簡單的配置(類似於 Dao 介面上面的 Mapper 註解一樣)即可實現對 HTTP 介面的繫結。透過 Feign,我們可以像呼叫本地方法一樣來呼叫遠端服務,而完全感覺不到這是在進行遠端呼叫。Feign 支援多種註解,例如 Feign 自帶的註解以及 JAX-RS 註解等,但遺憾的是 Feign 本身並不支援 Spring MVC 註解,這無疑會給廣大 Spring 使用者帶來不便。
2。 什麼是openFeign
2019 年 Netflix 公司宣佈 Feign 元件正式進入停更維護狀態,於是 Spring 官方便推出了一個名為 OpenFeign 的元件作為 Feign 的替代方案。
OpenFeign 全稱 Spring Cloud OpenFeign,它是 Spring 官方推出的一種宣告式服務呼叫與負載均衡元件,它的出現就是為了替代進入停更維護狀態的 Feign。OpenFeign 是 Spring Cloud 對 Feign 的二次封裝,它具有 Feign 的所有功能,並在 Feign 的基礎上增加了對 Spring MVC 註解的支援,例如 @RequestMapping、@GetMapping 和 @PostMapping 等。
常用註解
註解
說明
@FeignClient
該註解用於通知 OpenFeign 元件對 @RequestMapping 註解下的介面進行解析,並透過動態代理的方式產生實現類,實現負載均衡和服務呼叫。
@EnableFeignClients
該註解用於開啟 OpenFeign 功能,當 Spring Cloud 應用啟動時,OpenFeign 會掃描標有 @FeignClient 註解的介面,生成代理並註冊到 Spring 容器中。
@RequestMapping
Spring MVC 註解,在 Spring MVC 中使用該註解對映請求,透過它來指定控制器(Controller)可以處理哪些 URL 請求,相當於 Servlet 中 web。xml 的配置。
@GetMapping
Spring MVC 註解,用來對映 GET 請求,它是一個組合註解,相當於 @RequestMapping(method = RequestMethod。GET) 。
@PostMapping
Spring MVC 註解,用來對映 POST 請求,它是一個組合註解,相當於 @RequestMapping(method = RequestMethod。POST) 。
3。 Feign與OpenFeign的對比
相同點
Feign 和 OpenFeign 都是 Spring Cloud 下的遠端呼叫和負載均衡元件。
Feign 和 OpenFeign 作用一樣,都可以實現服務的遠端呼叫和負載均衡。
Feign 和 OpenFeign 都對 Ribbon 進行了整合,都利用 Ribbon 維護了可用服務清單,並透過 Ribbon 實現了客戶端的負載均衡。
Feign 和 OpenFeign 都是在服務消費者(客戶端)定義服務繫結介面並透過註解的方式進行配置,以實現遠端服務的呼叫。
不同點
Feign 和 OpenFeign 的依賴項不同,Feign 的依賴為 spring-cloud-starter-feign,而 OpenFeign 的依賴為 spring-cloud-starter-openfeign。
Feign 和 OpenFeign 支援的註解不同,Feign 支援 Feign 註解和 JAX-RS 註解,但不支援 Spring MVC 註解;OpenFeign 除了支援 Feign 註解和 JAX-RS 註解外,還支援 Spring MVC 註解。
4。 openFeign使用
引入依賴
<!—— openfeign依賴 ——>
定義遠端呼叫介面
在 @FeignClient 註解中,value 屬性的取值為:服務提供者的服務名,即服務提供者配置檔案(application。yml)中 spring。application。name 的取值。
介面中定義的每個方法都與服務提供者中 Controller 定義的服務方法對應。
openfeign本身並不具備fallback降級屬性,需要搭配降級框架如(hystrix或sentinel)。如果未引入降級框架,即使宣告fallback降級服務類,在遠端呼叫發生異常時,也不會觸發
@Component@FeignClient(value = “service5”)public interface FeignService { @GetMapping(“/api/v1/service5”) List
啟動類添加註解@EnableFeignClients
@EnableFeignClients@EnableEurekaClient@SpringBootApplicationpublic class Service3Application { public static void main(String[] args) { SpringApplication。run(Service3Application。class, args); }}
Controller引入呼叫
@RestController@RequestMapping(“api/v1/service3”)public class Controller { @Resource private FeignService feignService; @GetMapping public List
5。 OpenFeign超時處理
openFeign 客戶端的預設超時時間為 1 秒鐘,如果服務端處理請求的時間超過 1 秒就會報錯。為了避免這樣的情況,我們需要對 OpenFeign 客戶端的超時時間進行控制。
yml新增如下進行配置
ribbon: ReadTimeout: 6000 #建立連線所用的時間,適用於網路狀況正常的情況下,兩端兩端連線所用的時間 ConnectionTimeout: 6000 #建立連線後,服[[=務器讀取到可用資源的時間feign: client: httpclient: enabled: true # 開啟 HttpClient最佳化連線池 compression: request: enabled: true # 開啟請求資料的壓縮功能 mime-types: text/xml,application/xml, application/json # 壓縮型別 min-request-size: 1024 # 最小壓縮值標準,當資料大於 1024 才會進行壓縮 response: enabled: true # 開啟響應資料壓縮功能
6。 OpenFeign日誌增強
yml新增日誌級別宣告
logging: level: com。ftc。service3。FeignService: debug #feign日誌以什麼樣的級別監控該介面
說明:
com。ftc。service3。FeignService 是開啟 @FeignClient 註解的介面(即服務繫結介面)的完整類名。也可以只配置部分路徑,表示監控該路徑下的所有服務繫結介面
debug:表示監聽該介面的日誌級別。
建立日誌配置類
@Configurationpublic class ConfigBean { /** * OpenFeign 日誌增強 * 配置 OpenFeign 記錄哪些內容 */ @Bean Logger。Level feginLoggerLevel() { return Logger。Level。FULL; }}
該配置的作用是透過配置的 Logger。Level 物件告訴 OpenFeign 記錄哪些日誌內容。Logger。Level 的具體級別如下:
NONE:不記錄任何資訊。
BASIC:僅記錄請求方法、URL 以及響應狀態碼和執行時間。
HEADERS:除了記錄 BASIC 級別的資訊外,還會記錄請求和響應的頭資訊。
FULL:記錄所有請求與響應的明細,包括頭資訊、請求體、元資料等等。
FULL級別如圖:
source : //www。yuque。com/u27809381/ca4o9w/ocr3v6
猜你喜歡
- 2023-01-27公網介面狀態異常導致網速慢的處理方式
- 2023-01-07PC硬體及整機 篇六十九:微星B760M迫擊炮主機板評測,通吃12代13代酷睿處理器,裝機更實惠
- 2022-12-28舊筆記本選新顯示器要注意哪些?
- 2022-12-26SpringCloud系列——TX-LCN分散式事務管理
- 2021-12-09這款支援蘋果、華為和小米的快充,它不香嗎?