springboot中如何使用openfeign進行接口調(diào)用
在項目開發(fā)過程中,我們開發(fā)的項目或多或少都會與其他交互的系統(tǒng)進行對接集成,或者是微服務(wù)項目之間進行調(diào)用,雙方相互調(diào)用接口來獲取或者傳遞數(shù)據(jù),以往我們使用的方式可能有 httpClient、okhttp、httpUrlConnection 等等,來學(xué)習(xí)一下如何使用 openfeign 來進行調(diào)用。
一、feign 和 openfeign ?
Feign 是 Springcloud 組件中的一個輕量級 Restful 的 HTTP 服務(wù)客戶端,F(xiàn)eign 內(nèi)置了 Ribbon,用來做客戶端負(fù)載均衡,去調(diào)用服務(wù)注冊中心的服務(wù)。
Feign 的使用方式是:使用Feign的注解定義接口,調(diào)用這個接口,就可以調(diào)用服務(wù)注冊中心的服務(wù)。
OpenFeign 是 springcloud 在Feign的基礎(chǔ)上支持了 SpringMVC 的注解,如 @RequestMapping 等等。
OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通過動態(tài)代理的方式產(chǎn)生實現(xiàn)類,實現(xiàn)類中做負(fù)載均衡并調(diào)用其他服務(wù)。
二、為什么要使用 openfeign ?
1、Feign 本身不支持 Spring MVC 的注解,它有一套自己的注解
2、Fegin 是 Netflix 公司產(chǎn)品,停止更新了。
3、使用 OpenFeign 可以簡化項目之間接口的調(diào)用,我們不需要關(guān)心 http 調(diào)用的代碼
三、創(chuàng)建一個簡單的服務(wù)提供方
創(chuàng)建一個基本的 springboot 項目
1、引入基礎(chǔ)依賴
<dependencies> <dependency> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2、application.yml 配置文件
server: port: 8081
3、創(chuàng)建一個 controller
@RestController
@RequestMapping("/demo")
public class FeignDemoController {
@GetMapping("/test")
public String test(){
return "hello openfegin";
}
}4、啟動服務(wù)
四、服務(wù)調(diào)用方 openfeign 調(diào)用服務(wù)提供方
創(chuàng)建一個基本的 springboot 項目
1、引入相關(guān)依賴
這里要注意springboot 和 springCloud 版本
當(dāng)前 springboot 版本 2.3.4.RELEASE
springcloud 版本 Hoxton.SR4
<properties>
<java.version>1.8</java.version>
<spring.cloud-version>Hoxton.SR4</spring.cloud-version>
</properties>
<dependencies>
<dependency>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>2、啟動類中增加注解
開啟 feign 功能
@SpringBootApplication
@EnableFeignClients
public class OpenfeginApplication {
public static void main(String[] args) {
SpringApplication.run(OpenfeginApplication.class, args);
}
}3、編寫客戶端調(diào)用接口
@FeignClient 標(biāo)注該類是一個feign接口
name:因為這里并未進行服務(wù)注冊,所以就隨便命名一個url:被調(diào)用的服務(wù)提供方的接口地址
@FeignClient(name = "demo",url = "http://localhost:8081/demo")
public interface FeginDemo {
@GetMapping("test") //被調(diào)用接口的請求類型
String test();
}4、測試調(diào)用服務(wù)端提供端接口
@RestController
@RequestMapping("/feginDemo")
public class FeginDemoController {
@Autowired
FeginDemo feginDemo;
@GetMapping("/test")
public String test(){
String test = feginDemo.test();
return test;
}
}5、測試
啟動項目,訪問 http://localhost:8080/feginDemo/test

接口調(diào)用成功!
那么這里呢,我們就實現(xiàn)了通過 openfeign 完成一次簡單的接口調(diào)用,如果沒有使用 openfeign 這里的調(diào)用我們就只能通過 httpclient、okhttp 等方式來調(diào)用了,使用了 openfeign 之后,你會發(fā)現(xiàn),調(diào)用別人的接口竟是如此簡單。
五、openfeign 服務(wù)熔斷
在調(diào)用接口過程中,由于是調(diào)用別人接口,肯定會存在一些意外因素,比如被調(diào)用的服務(wù)提供方系統(tǒng)宕機了,訪問不到了等情況,如下比如我停止 被調(diào)用的服務(wù)提供方,再去進行調(diào)用

那么這個時候我們就需要用到服務(wù)熔斷了,在對方服務(wù)異常的時候,返回這個信息肯定不太友好,我們來讓它稍微友好一些
openfeign 中默認(rèn)集成了 Hystrix

1、在 application.yml 配置文件中開啟
feign:
hystrix:
enabled: true2、配置 fallback 的處理類
創(chuàng)建一個類,實現(xiàn)我們的 FeginDemo ,然后實現(xiàn)接口中的方法,進行重寫
@Component
public class ErrorMessage implements FeginDemo {
@Override
public String test() {
return "服務(wù)器開小差了哦,請稍后再試";
}
}3、改造 feignClient
fallback:配置剛才的實現(xiàn)類 ErrorMessage
@FeignClient(name = "demo",url = "http://localhost:8081/demo",fallback = ErrorMessage.class)
public interface FeginDemo {
@GetMapping("test")
String test();
}4、測試熔斷效果
重新啟動一下服務(wù)再進行訪問

對于用戶來說,這樣是不是更加友好一點了呢?總比你一連串的英文往人家臉上呼來的好吧
六、配置日志
1、配置項目日志級別
logging: level: com.wxw.openfeign: debuglogging:
level:
com.wxw.openfeign: debug2、配置 openfeign 日志級別
@Configuration
public class FeignLogConfiguration {
// NONE:不記錄任何日志信息,這是默認(rèn)值。
// BASIC:僅記錄請求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時間
// HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請求和響應(yīng)的頭信息
// FULL:記錄所有請求和響應(yīng)的明細(xì),包括頭信息、請求體、元數(shù)據(jù)
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}3、配置日志類
@FeignClient(name = "demo",url = "http://localhost:8081/demo",
fallback = ErrorMessage.class,configuration = FeignLogConfiguration.class)
public interface FeginDemo {
@GetMapping("test")
String test();
}4、調(diào)用之后查看日志

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java String 和 new String()的比較與區(qū)別
這篇文章主要介紹了Java String 和 new String()的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-04-04
SpringBoot+mybatis+Vue實現(xiàn)前后端分離項目的示例
本文主要介紹了SpringBoot+mybatis+Vue實現(xiàn)前后端分離項目的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
Springboot @Transactional大事務(wù)處理的幾點建議
本文主要介紹了大事務(wù)的概念及其危害,并提出了幾種解決大事務(wù)問題的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Java技巧函數(shù)方法實現(xiàn)二維數(shù)組遍歷
這篇文章主要介紹了Java技巧函數(shù)方法實現(xiàn)二維數(shù)組遍歷,二維數(shù)組遍歷,每個元素判斷下是否為偶數(shù),相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-08-08
Java 8中map()和flatMap()方法區(qū)別詳解
這篇文章主要為大家介紹了Java 8中map()和flatMap()方法區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

