溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringCloud中如何使用Feign調(diào)用服務(wù)接口

發(fā)布時(shí)間:2021-09-29 14:47:48 來源:億速云 閱讀:166 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關(guān)SpringCloud中如何使用Feign調(diào)用服務(wù)接口,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

JAVA 項(xiàng)目中接口調(diào)用怎么做?

1)Httpclient

HttpClient 是 Apache Jakarta Common 下的子項(xiàng)目,用來提供高效的、最新的、功能豐富的支持 Http 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新版本和建議。

HttpClient 相比傳統(tǒng) JDK 自帶的 URLConnection,提升了易用性和靈活性,使客戶端發(fā)送 HTTP 請(qǐng)求變得容易,提高了開發(fā)的效率。

2)Okhttp

一個(gè)處理網(wǎng)絡(luò)請(qǐng)求的開源項(xiàng)目,是安卓端最火的輕量級(jí)框架,由 Square 公司貢獻(xiàn),用于替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 擁有簡(jiǎn)潔的 API、高效的性能,并支持多種協(xié)議(HTTP/2 和 SPDY)。

3)HttpURLConnection

HttpURLConnection 是 Java 的標(biāo)準(zhǔn)類,它繼承自 URLConnection,可用于向指定網(wǎng)站發(fā)送 GET 請(qǐng)求、POST 請(qǐng)求。HttpURLConnection 使用比較復(fù)雜,不像 HttpClient 那樣容易使用。

4)RestTemplate

RestTemplate 是 Spring 提供的用于訪問 Rest 服務(wù)的客戶端,RestTemplate 提供了多種便捷訪問遠(yuǎn)程 HTTP 服務(wù)的方法,能夠大大提高客戶端的編寫效率。

上面介紹的是最常見的幾種調(diào)用接口的方法,我們下面要介紹的方法比上面的更簡(jiǎn)單、方便,它就是 Feign。

Feign 是一個(gè)聲明式的 REST 客戶端,它能讓 REST 調(diào)用更加簡(jiǎn)單。Feign 供了 HTTP 請(qǐng)求的模板,通過編寫簡(jiǎn)單的接口和插入注解,就可以定義好 HTTP 請(qǐng)求的參數(shù)、格式、地址等信息。

而 Feign 則會(huì)完全代理 HTTP 請(qǐng)求,我們只需要像調(diào)用方法一樣調(diào)用它就可以完成服務(wù)請(qǐng)求及相關(guān)處理。

Spring Cloud 對(duì) Feign 進(jìn)行了封裝,使其支持 SpringMVC 標(biāo)準(zhǔn)注解和 HttpMessageConverters。Feign 可以與 Eureka 和 Ribbon 組合使用以支持負(fù)載均衡。

在Spring Cloud中集成Feign

在 Spring Cloud 中集成 Feign 的步驟相當(dāng)簡(jiǎn)單,首先還是加入 Feign 的依賴,代碼如下所示。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

在啟動(dòng)類上加 @EnableFeignClients 注解,如果你的 Feign 接口定義跟你的啟動(dòng)類不在同一個(gè)包名下,還需要制定掃描的包名 @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調(diào)用接口

定義一個(gè) Feign 的客戶端,以接口形式存在,代碼如下所示。

@FeignClient(value = "eureka-client-user-service")public interface UserRemoteClient {@GetMapping("/user/hello")String hello();
}

首先我們來看接口上加的 @FeignClient 注解。這個(gè)注解標(biāo)識(shí)當(dāng)前是一個(gè) Feign 的客戶端,value 屬性是對(duì)應(yīng)的服務(wù)名稱,也就是你需要調(diào)用哪個(gè)服務(wù)中的接口。

定義方法時(shí)直接復(fù)制接口的定義即可,當(dāng)然還有另一種做法,就是將接口單獨(dú)抽出來定義,然后在 Controller 中實(shí)現(xiàn)接口。

在調(diào)用的客戶端中也實(shí)現(xiàn)了接口,從而達(dá)到接口共用的目的。我這里的做法是不共用的,即單獨(dú)創(chuàng)建一個(gè) API Client 的公共項(xiàng)目,基于約定的模式,每寫一個(gè)接口就要對(duì)應(yīng)寫一個(gè)調(diào)用的 Client,后面打成公共的 jar,這樣無論是哪個(gè)項(xiàng)目需要調(diào)用接口,只要引入公共的接口 SDK jar 即可,不用重新定義一遍了。

定義之后可以直接通過注入 UserRemoteClient 來調(diào)用,這對(duì)于開發(fā)人員來說就像調(diào)用本地方法一樣。

接下來采用 Feign 來調(diào)用 /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("調(diào)用結(jié)果:" + result);return result;
}

通過跟注釋掉的代碼相比可以發(fā)現(xiàn),我們的調(diào)用方式變得越來越簡(jiǎn)單了,從最開始的指定地址,到后面通過 Eureka 中的服務(wù)名稱來調(diào)用,再到現(xiàn)在直接通過定義接口來調(diào)用。

以上就是SpringCloud中如何使用Feign調(diào)用服務(wù)接口,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI