SpringCloud-使用Feign呼叫服務介面
JAVA 專案中介面呼叫怎麼做?
1)Httpclient
HttpClient 是 Apache Jakarta Common 下的子專案,用來提供高效的、最新的、功能豐富的支援 Http 協議的客戶端程式設計工具包,並且它支援 HTTP 協議最新版本和建議。
HttpClient 相比傳統 JDK 自帶的 URLConnection,提升了易用性和靈活性,使客戶端傳送 HTTP 請求變得容易,提高了開發的效率。
2)Okhttp
一個處理網路請求的開源專案,是安卓端最火的輕量級框架,由 Square 公司貢獻,用於替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 擁有簡潔的 API、高效的效能,並支援多種協議(HTTP/2 和 SPDY)。
3)HttpURLConnection
HttpURLConnection 是 Java 的標準類,它繼承自 URLConnection,可用於向指定網站傳送 GET 請求、POST 請求。HttpURLConnection 使用比較複雜,不像 HttpClient 那樣容易使用。
4)RestTemplate
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
在 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”),程式碼如下所示。
使用Feign呼叫介面
定義一個 Feign 的客戶端,以介面形式存在,程式碼如下所示。
首先我們來看介面上加的 @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("); //String result = restTemplate.getForObject("); String result = userRemoteClient.hello(); System.out.println("呼叫結果:" + result); return result; }
透過跟註釋掉的程式碼相比可以發現,我們的呼叫方式變得越來越簡單了,從最開始的指定地址,到後面透過 Eureka 中的服務名稱來呼叫,再到現在直接透過定義介面來呼叫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2923778/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (22)SpringCloud-使用Feign呼叫服務介面SpringGCCloud
- SpringCloud系列之使用Feign進行服務呼叫SpringGCCloud
- SpringCloud之使用Feign跨服務呼叫最佳方式SpringGCCloud
- 微服務架構 | 4.2 基於 Feign 與 OpenFeign 的服務介面呼叫微服務架構
- Spring Cloud Alibaba(8)---Feign服務呼叫SpringCloud
- Spring Cloud Feign 宣告式服務呼叫SpringCloud
- 宣告式服務呼叫 Spring Cloud FeignSpringCloud
- Spring Cloud Alibaba系列(三)使用feign進行服務呼叫SpringCloud
- SpringCloud之服務提供與呼叫(Ribbon,Feign)SpringGCCloud
- 微服務呼叫元件 Feign微服務元件
- 微服務互相呼叫-Feign微服務
- ②SpringCloud 實戰:引入Feign元件,發起服務間呼叫SpringGCCloud元件
- SpringCloud-服務間通訊方式SpringGCCloud
- SpringCloud 9.OpenFeign服務介面呼叫SpringGCCloud
- Eureka微服務之間呼叫-feign微服務
- 跟我學SpringCloud | 第三篇:服務的提供與Feign呼叫SpringGCCloud
- spring cloud feign實現遠端呼叫服務傳輸檔案SpringCloud
- 2020-12-14 OpenFeign服務介面呼叫
- Spring Cloud Alibaba 使用Feign進行服務消費SpringCloud
- Bug集錦-Spring Cloud Feign呼叫其它介面報錯SpringCloud
- Feign客戶端呼叫服務時丟失Header引數的解決方案客戶端Header
- [jaeger] 四、微服務之呼叫鏈(Feign+SpringCloud)微服務SpringGCCloud
- Spring Cloud Alibaba 使用 feign 和 rebion 進行服務消費SpringCloud
- Spring Cloud微服務-基於Eureka的feign呼叫(1)SpringCloud微服務
- 服務與服務之間的呼叫
- Java使用HttpClient實現遠端服務呼叫JavaHTTPclient
- SpringCloud Alibaba實戰(8:使用OpenFeign服務呼叫)SpringGCCloud
- spring cloud微服務快速教程之(十四)spring cloud feign使用okhttp3--以及feign呼叫引數丟失的說明SpringCloud微服務HTTP
- SpringCloud之服務呼叫SpringGCCloud
- 服務端呼叫微信小程式OCR識別介面實現服務端微信小程式
- 好程式設計師Python培訓Python如何呼叫服務介面程式設計師Python
- grpc套路(四)php通過grpc呼叫golang的grpc介面服務RPCPHPGolang
- 解決spring cloud Feign遠端呼叫服務,新增headers解決攔截器攔截問題SpringCloudHeader
- Spring Boot 參考指南(使用RestTemplate呼叫REST服務)Spring BootREST
- feign jar 提供的介面不要隨便刪除了,對呼叫方有影響JAR
- eureka如何管理服務呼叫
- openlayer呼叫wms服務端服務端
- SpringCloud學習之路(四) - 服務消費者(Feign)SpringGCCloud