Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn)
1.1 簡(jiǎn)介
1.1.1 概述
Feign 旨在使編寫(xiě) Java Http 客戶(hù)端變得更容易。在使用 Ribbon + RestTemplate 時(shí),利用 RestTemplate 對(duì) http 請(qǐng)求的封裝處理,形成了一套模版化的調(diào)用方法。但是在實(shí)際開(kāi)發(fā)中,由于對(duì)服務(wù)依賴(lài)的調(diào)用可能不止一處,往往一個(gè)接口會(huì)被多處調(diào)用,所以通常都會(huì)針對(duì)每個(gè)微服務(wù)自行封裝一些客戶(hù)端類(lèi)來(lái)包裝這些依賴(lài)服務(wù)的調(diào)用。所以,F(xiàn)eign 在 Ribbon 基礎(chǔ)上做了進(jìn)一步封裝,由他來(lái)幫助我們定義和實(shí)現(xiàn)依賴(lài)服務(wù)接口的定義。在 Feign 的實(shí)現(xiàn)下,我們只需創(chuàng)建一個(gè)接口并使用注解的方式來(lái)配置它,即可完成對(duì)服務(wù)提供方的接口綁定,簡(jiǎn)化了使用 Spring cloud Ribbon 時(shí),自動(dòng)封裝服務(wù)調(diào)用客戶(hù)端的開(kāi)發(fā)量。與 Ribbon 不同的是,通過(guò) Feign 只需要定義服務(wù)綁定接口且以聲明式的方法,優(yōu)雅而簡(jiǎn)單的實(shí)現(xiàn)了服務(wù)調(diào)用
Feign 已經(jīng)停止維護(hù),OpenFeign 是 Spring Cloud 在 Feign 的基礎(chǔ)上進(jìn)一步開(kāi)發(fā)出來(lái)替代 Feign 的技術(shù),支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通過(guò)動(dòng)態(tài)代理的方式產(chǎn)生實(shí)現(xiàn)類(lèi),實(shí)現(xiàn)類(lèi)中做負(fù)載均衡并調(diào)用其他服務(wù)。
1.1.2 相關(guān)依賴(lài)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
1.2 簡(jiǎn)單使用
1.2.1 基礎(chǔ)工程
1.2.2 Feign 客戶(hù)端
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/11/5
* @description Feign 接口
*/
@Component
@FeignClient("ProviderServer") // 服務(wù)提者名稱(chēng)
public interface ProviderFeign {
@GetMapping("/provider/get") // 服務(wù)地址
public String get();
}
1.2.3 啟動(dòng)類(lèi)
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
1.2.4 調(diào)用服務(wù)
我們可以發(fā)現(xiàn) Feign 自帶負(fù)載均衡配置,而 OpenFeign 默認(rèn)支持 Ribbon,我們可以通過(guò) Ribbon 的配置來(lái)修改負(fù)載均衡策略。Ribbon 詳情參考 ☞Spring Cloud 系列之負(fù)載均衡 Ribbon

1.3 其他配置
1.3.1 超時(shí)控制
# 設(shè)置 feign 客戶(hù)端超時(shí)時(shí)間, 默認(rèn) 1s feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 # OpenFeign 默認(rèn)支持 Ribbon,也可以使用以下配置 ribbon: # 建立連接所用時(shí)間,適用于網(wǎng)絡(luò)正常的情況下,兩端連接所用的時(shí)間 ConnectTimeout: 5000 # 建立連接后從服務(wù)器讀取到可用資源所用的時(shí)間 ReadTimeout: 5000
1.3.2 數(shù)據(jù)壓縮
feign: compression: request: # 開(kāi)啟數(shù)據(jù)壓縮請(qǐng)求 enabled: true # 壓縮數(shù)據(jù)類(lèi)型 mime-types: text/xml, application/xml, application/json # 數(shù)據(jù)壓縮下限 2048表示傳輸數(shù)據(jù)大于2048 才會(huì)進(jìn)行數(shù)據(jù)壓縮(最小壓縮值標(biāo)準(zhǔn)) min-request-size: 2048 # 開(kāi)啟數(shù)據(jù)壓縮響應(yīng) response: enabled: true
1.3.3 日志配置
☞ 日志級(jí)別
♞ NONE:不開(kāi)啟日志(默認(rèn))
♞ BASIC:記錄請(qǐng)求方法、URL、響應(yīng)狀態(tài)、執(zhí)行時(shí)間
♞ HEADERS:在 BASIC 基礎(chǔ)上增加請(qǐng)求/響應(yīng)頭
♞ FULL:在 HEADERS 基礎(chǔ)上增加 body 和請(qǐng)求元數(shù)據(jù)
☞ 配置類(lèi)
@Configuration
public class LogConfig {
@Bean
Logger.Level loggerLevel(){
return Logger.Level.FULL;
}
}
☞ 配置文件
logging: level: # 以什么級(jí)別監(jiān)控那個(gè)接口 com.software.controller: debug
☞ 輸出

到此這篇關(guān)于Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Cloud服務(wù)調(diào)用 OpenFeign內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud OpenFeign超詳細(xì)講解模板化遠(yuǎn)程通信的實(shí)現(xiàn)
- Spring?Cloud?OpenFeign模版化客戶(hù)端搭建過(guò)程
- 分享Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧
- SpringCloud學(xué)習(xí)筆記之OpenFeign進(jìn)行服務(wù)調(diào)用
- 解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無(wú)法啟動(dòng)的問(wèn)題
- 一篇文章教你如何在SpringCloud項(xiàng)目中使用OpenFeign
- 完美解決SpringCloud-OpenFeign使用okhttp替換不生效問(wèn)題
- 詳解SpringCloud-OpenFeign組件的使用
- Springcloud基于OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用代碼實(shí)例
- Spring Cloud詳解實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法
相關(guān)文章
SWT(JFace)體驗(yàn)之Slider,Scale
SWT(JFace)體驗(yàn)之Slider,Scale實(shí)現(xiàn)代碼。2009-06-06
java用arraycopy實(shí)現(xiàn)多擊事件
這篇文章主要介紹了java用arraycopy實(shí)現(xiàn)多擊事件的多種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
SpringBoot2整合Ehcache組件實(shí)現(xiàn)輕量級(jí)緩存管理
EhCache是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、上手簡(jiǎn)單等特點(diǎn),是Hibernate中默認(rèn)的緩存提供方。本文講述下SpringBoot2 整合Ehcache組件的步驟2021-06-06
Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用
這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用 的相關(guān)資料,需要的朋友可以參考下2015-12-12
Java模擬實(shí)現(xiàn)HashMap算法流程詳解
在java開(kāi)發(fā)中,HashMap是最常用、最常見(jiàn)的集合容器類(lèi)之一,文中通過(guò)示例代碼介紹HashMap為啥要二次Hash,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
SpringMVC KindEditor在線(xiàn)編輯器之文件上傳代碼實(shí)例
這篇文章主要介紹了SpringMVC KindEditor在線(xiàn)編輯器之文件上傳代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Java中LambdaQueryWrapper的常用方法詳解
這篇文章主要給大家介紹了關(guān)于Java中LambdaQueryWrapper常用方法的相關(guān)資料,lambdaquerywrapper是一個(gè)Java庫(kù),用于構(gòu)建類(lèi)型安全的Lambda表達(dá)式查詢(xún),需要的朋友可以參考下2023-11-11

