您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關SpringCloud中如何使用Feign調用服務接口,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
JAVA 項目中接口調用怎么做?
HttpClient 是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 Http 協議的客戶端編程工具包,并且它支持 HTTP 協議最新版本和建議。
HttpClient 相比傳統 JDK 自帶的 URLConnection,提升了易用性和靈活性,使客戶端發送 HTTP 請求變得容易,提高了開發的效率。
一個處理網絡請求的開源項目,是安卓端最火的輕量級框架,由 Square 公司貢獻,用于替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 擁有簡潔的 API、高效的性能,并支持多種協議(HTTP/2 和 SPDY)。
HttpURLConnection 是 Java 的標準類,它繼承自 URLConnection,可用于向指定網站發送 GET 請求、POST 請求。HttpURLConnection 使用比較復雜,不像 HttpClient 那樣容易使用。
RestTemplate 是 Spring 提供的用于訪問 Rest 服務的客戶端,RestTemplate 提供了多種便捷訪問遠程 HTTP 服務的方法,能夠大大提高客戶端的編寫效率。
上面介紹的是最常見的幾種調用接口的方法,我們下面要介紹的方法比上面的更簡單、方便,它就是 Feign。
Feign 是一個聲明式的 REST 客戶端,它能讓 REST 調用更加簡單。Feign 供了 HTTP 請求的模板,通過編寫簡單的接口和插入注解,就可以定義好 HTTP 請求的參數、格式、地址等信息。
而 Feign 則會完全代理 HTTP 請求,我們只需要像調用方法一樣調用它就可以完成服務請求及相關處理。
Spring Cloud 對 Feign 進行了封裝,使其支持 SpringMVC 標準注解和 HttpMessageConverters。Feign 可以與 Eureka 和 Ribbon 組合使用以支持負載均衡。
在 Spring Cloud 中集成 Feign 的步驟相當簡單,首先還是加入 Feign 的依賴,代碼如下所示。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
在啟動類上加 @EnableFeignClients 注解,如果你的 Feign 接口定義跟你的啟動類不在同一個包名下,還需要制定掃描的包名 @EnableFeignClients(basePackages=“com.fangjia.api.client”),代碼如下所示。
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients(basePackages = "com.fangjia.api.client") public class FshSubstitutionServiceApplication {public static void main(String[] args) {SpringApplication.run(FshSubstitutionServiceApplication.class, args); } }
定義一個 Feign 的客戶端,以接口形式存在,代碼如下所示。
@FeignClient(value = "eureka-client-user-service")public interface UserRemoteClient {@GetMapping("/user/hello")String hello(); }
首先我們來看接口上加的 @FeignClient 注解。這個注解標識當前是一個 Feign 的客戶端,value 屬性是對應的服務名稱,也就是你需要調用哪個服務中的接口。
定義方法時直接復制接口的定義即可,當然還有另一種做法,就是將接口單獨抽出來定義,然后在 Controller 中實現接口。
在調用的客戶端中也實現了接口,從而達到接口共用的目的。我這里的做法是不共用的,即單獨創建一個 API Client 的公共項目,基于約定的模式,每寫一個接口就要對應寫一個調用的 Client,后面打成公共的 jar,這樣無論是哪個項目需要調用接口,只要引入公共的接口 SDK jar 即可,不用重新定義一遍了。
定義之后可以直接通過注入 UserRemoteClient 來調用,這對于開發人員來說就像調用本地方法一樣。
接下來采用 Feign 來調用 /user/hello 接口,代碼如下所示。
@Autowired private UserRemoteClient userRemoteClient; @GetMapping("/callHello") public String callHello() {//return restTemplate.getForObject("http://localhost:8083/house/hello",String.class);//String result = restTemplate.getForObject("http://eureka-client-user-service/user/hello",String.class);String result = userRemoteClient.hello(); System.out.println("調用結果:" + result);return result; }
通過跟注釋掉的代碼相比可以發現,我們的調用方式變得越來越簡單了,從最開始的指定地址,到后面通過 Eureka 中的服務名稱來調用,再到現在直接通過定義接口來調用。
以上就是SpringCloud中如何使用Feign調用服務接口,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。