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

