SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例
概述
Feign 是一個(gè)基于注解的 HTTP 客戶端庫(kù),它允許您將 HTTP 請(qǐng)求轉(zhuǎn)換為聲明式的 Java 接口。您可以使用類(lèi)似于 Spring MVC 的注解來(lái)定義接口的方法,然后 Feign 會(huì)自動(dòng)處理 HTTP 請(qǐng)求的創(chuàng)建和執(zhí)行。
Feign 還與 Spring Cloud 集成得非常好,它可以與 Ribbon(用于負(fù)載均衡)和 Eureka(用于服務(wù)發(fā)現(xiàn))等一起使用,以便于構(gòu)建彈性的微服務(wù)應(yīng)用程序。
官方地址:https://github.com/OpenFeign/feign
1、引入依賴
首先,確保在你的項(xiàng)目中添加了 Spring Cloud Feign 依賴。如果你正在使用 Maven,可以在 pom.xml 文件中添加以下依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、啟用 Feign
在主應(yīng)用程序類(lèi)上添加 @EnableFeignClients 注解,以啟用 Feign 客戶端。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3、創(chuàng)建 Feign 接口
接下來(lái),你需要?jiǎng)?chuàng)建一個(gè) Feign 客戶端接口,該接口定義了遠(yuǎn)程服務(wù)的方法。這個(gè)接口類(lèi)似于 Spring Data 的 Repository 接口,但它用于遠(yuǎn)程服務(wù)調(diào)用。
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "remoteservice") // 指定要調(diào)用的服務(wù)名稱(chēng) public interface RemoteServiceClient { @GetMapping("/api/resource/{id}") Resource getResourceById(@PathVariable("id") Long id); @PostMapping("/api/resource") Resource createResource(@RequestBody Resource resource); }
在上面的示例中,RemoteServiceClient 接口使用 @FeignClient 注解指定了遠(yuǎn)程服務(wù)的名稱(chēng)(在 Eureka 或Nacos注冊(cè)中心中注冊(cè)的名稱(chēng)),并定義了一個(gè)用于獲取資源的方法。
4、使用 Feign 客戶端
現(xiàn)在可以在其它服務(wù)中使用 Feign 客戶端來(lái)調(diào)用遠(yuǎn)程服務(wù)。
@Service public class MyService { private final ExampleFeignClient feignClient; @Autowired public MyService(ExampleFeignClient feignClient) { this.feignClient = feignClient; } public Resource getResourceById(Long id) { return feignClient.getResourceById(id); } public Resource createResource(Resource resource) { return feignClient.createResource(resource); } }
在上面的示例中,MyController 類(lèi)通過(guò)構(gòu)造函數(shù)注入了 RemoteServiceClient,然后可以使用它來(lái)調(diào)用遠(yuǎn)程服務(wù)的方法。
5、配置 Feign 客戶端
Feign 提供了多種自定義配置方式,以便你根據(jù)項(xiàng)目需求來(lái)調(diào)整 Feign 客戶端的行為。
一般情況下,默認(rèn)值就能滿足使用,如果要自定義,只需要?jiǎng)?chuàng)建自定義的@Bean覆蓋默認(rèn)Bean即可。
5.1、全局配置文件
你可以在應(yīng)用的 application.properties 或 application.yml 文件中配置全局的 Feign 客戶端屬性。
feign: client: config: default: # 這里用default就是全局配置,如果是寫(xiě)服務(wù)名稱(chēng),則是針對(duì)某個(gè)微服務(wù)的配置 connectTimeout: 5000 # 連接超時(shí)時(shí)間 readTimeout: 5000 # 讀取超時(shí)時(shí)間 loggerLevel: FULL # 日志級(jí)別
日志的級(jí)別分為四種:
- NONE:不記錄任何日志信息,這是默認(rèn)值。
- BASIC:僅記錄請(qǐng)求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時(shí)間
- HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請(qǐng)求和響應(yīng)的頭信息
- FULL:記錄所有請(qǐng)求和響應(yīng)的明細(xì),包括頭信息、請(qǐng)求體、元數(shù)據(jù)。
5.2、Feign 客戶端接口
在 Feign 客戶端接口中,你可以使用注解為特定的方法配置屬性。例如,你可以設(shè)置某個(gè)方法的超時(shí)時(shí)間。
@FeignClient(name = "remoteservice") public interface RemoteServiceClient { @GetMapping("/api/resource") @RequestLine("GET /api/resource") @Headers("Accept: application/json") @Timeout(3000) // 設(shè)置超時(shí)時(shí)間為 3 秒 String getResource(); }
5.3、自定義配置類(lèi)
你可以創(chuàng)建一個(gè)自定義的 Feign 配置類(lèi),并在該類(lèi)中配置 Feign 的屬性。然后,通過(guò) @FeignClient 注解的 configuration 屬性引用該配置類(lèi)。
@Configuration public class FeignConfig { @Bean public Logger.Level feignLogLevel(){ return Logger.Level.BASIC; // 日志級(jí)別為BASIC } @Bean public Request.Options requestOptions() { return new Request.Options(5000, 5000); // 設(shè)置連接超時(shí)和讀取超時(shí)時(shí)間 } }
5.4、自定義屬性文件
你可以創(chuàng)建一個(gè)屬性文件(例如,feign-custom.properties),并在其中配置 Feign 客戶端的屬性。然后,在應(yīng)用的主配置文件中,使用 @PropertySource 注解引用該屬性文件。
@PropertySource("classpath:feign-custom.properties") @SpringBootApplication @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
在 feign-custom.properties 中配置屬性:
feign.client.config.default.connectTimeout=5000 feign.client.config.default.readTimeout=5000
總結(jié)
Feign 是一個(gè)強(qiáng)大且易于使用的聲明式 HTTP 客戶端庫(kù),它在 Spring Cloud 微服務(wù)架構(gòu)中起到了關(guān)鍵作用。通過(guò)創(chuàng)建 Feign 接口并使用注解來(lái)定義 HTTP 請(qǐng)求,您可以輕松地調(diào)用其他微服務(wù)的 RESTful API。同時(shí),F(xiàn)eign 還集成了負(fù)載均衡和服務(wù)發(fā)現(xiàn),使得構(gòu)建彈性微服務(wù)應(yīng)用程序更加容易。
到此這篇關(guān)于SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例的文章就介紹到這了,更多相關(guān)SpringCloud Feign遠(yuǎn)程調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java通過(guò)正則表達(dá)式獲取域名簡(jiǎn)單示例
在Java中可以使用正則表達(dá)式來(lái)從字符串中匹配和提取域名,下面這篇文章主要給大家介紹了關(guān)于Java通過(guò)正則表達(dá)式獲取域名的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請(qǐng)求的操作
這篇文章主要介紹了解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請(qǐng)求的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié)
本文主要介紹了SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例
這篇文章主要介紹了java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12關(guān)于synchronized的參數(shù)及其含義
這篇文章主要介紹了synchronized的參數(shù)及其含義詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹
Spring在3.1版本,就提供了一條基于注解的緩存策略,實(shí)際使用起來(lái)還是很絲滑的,本文將針對(duì)幾個(gè)常用的注解進(jìn)行簡(jiǎn)單的介紹說(shuō)明,有需要的小伙伴可以嘗試一下2021-07-07Java中反射動(dòng)態(tài)代理接口的詳解及實(shí)例
這篇文章主要介紹了Java中反射動(dòng)態(tài)代理接口的詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04Java實(shí)現(xiàn)“年-月-日 上午/下午時(shí):分:秒”的簡(jiǎn)單代碼
當(dāng)前的日期輸出的方法有很多,本文為大家介紹下在java中是如何實(shí)現(xiàn)“年-月-日 上午/下午時(shí):分:秒”,感興趣的朋友不妨參考下2015-08-08