SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例
概述
Feign 是一個基于注解的 HTTP 客戶端庫,它允許您將 HTTP 請求轉(zhuǎn)換為聲明式的 Java 接口。您可以使用類似于 Spring MVC 的注解來定義接口的方法,然后 Feign 會自動處理 HTTP 請求的創(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)用程序類上添加 @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 接口
接下來,你需要創(chuàng)建一個 Feign 客戶端接口,該接口定義了遠(yuǎn)程服務(wù)的方法。這個接口類似于 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ù)名稱 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ù)的名稱(在 Eureka 或Nacos注冊中心中注冊的名稱),并定義了一個用于獲取資源的方法。
4、使用 Feign 客戶端
現(xiàn)在可以在其它服務(wù)中使用 Feign 客戶端來調(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 類通過構(gòu)造函數(shù)注入了 RemoteServiceClient,然后可以使用它來調(diào)用遠(yuǎn)程服務(wù)的方法。
5、配置 Feign 客戶端
Feign 提供了多種自定義配置方式,以便你根據(jù)項(xiàng)目需求來調(diào)整 Feign 客戶端的行為。
一般情況下,默認(rèn)值就能滿足使用,如果要自定義,只需要創(chuàng)建自定義的@Bean覆蓋默認(rèn)Bean即可。
5.1、全局配置文件
你可以在應(yīng)用的 application.properties 或 application.yml 文件中配置全局的 Feign 客戶端屬性。
feign: client: config: default: # 這里用default就是全局配置,如果是寫服務(wù)名稱,則是針對某個微服務(wù)的配置 connectTimeout: 5000 # 連接超時時間 readTimeout: 5000 # 讀取超時時間 loggerLevel: FULL # 日志級別
日志的級別分為四種:
- NONE:不記錄任何日志信息,這是默認(rèn)值。
- BASIC:僅記錄請求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時間
- HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請求和響應(yīng)的頭信息
- FULL:記錄所有請求和響應(yīng)的明細(xì),包括頭信息、請求體、元數(shù)據(jù)。
5.2、Feign 客戶端接口
在 Feign 客戶端接口中,你可以使用注解為特定的方法配置屬性。例如,你可以設(shè)置某個方法的超時時間。
@FeignClient(name = "remoteservice") public interface RemoteServiceClient { @GetMapping("/api/resource") @RequestLine("GET /api/resource") @Headers("Accept: application/json") @Timeout(3000) // 設(shè)置超時時間為 3 秒 String getResource(); }
5.3、自定義配置類
你可以創(chuàng)建一個自定義的 Feign 配置類,并在該類中配置 Feign 的屬性。然后,通過 @FeignClient 注解的 configuration 屬性引用該配置類。
@Configuration public class FeignConfig { @Bean public Logger.Level feignLogLevel(){ return Logger.Level.BASIC; // 日志級別為BASIC } @Bean public Request.Options requestOptions() { return new Request.Options(5000, 5000); // 設(shè)置連接超時和讀取超時時間 } }
5.4、自定義屬性文件
你可以創(chuàng)建一個屬性文件(例如,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 是一個強(qiáng)大且易于使用的聲明式 HTTP 客戶端庫,它在 Spring Cloud 微服務(wù)架構(gòu)中起到了關(guān)鍵作用。通過創(chuàng)建 Feign 接口并使用注解來定義 HTTP 請求,您可以輕松地調(diào)用其他微服務(wù)的 RESTful API。同時,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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請求的操作
這篇文章主要介紹了解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請求的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié)
本文主要介紹了SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01關(guān)于synchronized的參數(shù)及其含義
這篇文章主要介紹了synchronized的參數(shù)及其含義詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹
Spring在3.1版本,就提供了一條基于注解的緩存策略,實(shí)際使用起來還是很絲滑的,本文將針對幾個常用的注解進(jìn)行簡單的介紹說明,有需要的小伙伴可以嘗試一下2021-07-07Java實(shí)現(xiàn)“年-月-日 上午/下午時:分:秒”的簡單代碼
當(dāng)前的日期輸出的方法有很多,本文為大家介紹下在java中是如何實(shí)現(xiàn)“年-月-日 上午/下午時:分:秒”,感興趣的朋友不妨參考下2015-08-08