1. 程式人生 > 其它 >MYSQL/HIVESQL筆試題(七):HIVESQL(七)

MYSQL/HIVESQL筆試題(七):HIVESQL(七)

1 Spring Cloud使用Feign呼叫服務介面

JAVA 專案中介面呼叫怎麼做?

1.1 Httpclient

HttpClient 是 Apache Jakarta Common 下的子專案,用來提供高效的、最新的、功能豐富的支援 Http 協議的客戶端程式設計工具包,並且它支援 HTTP 協議最新版本和建議。

1.2 Okhttp

一個處理網路請求的開源專案,是安卓端最火的輕量級框架,由 Square 公司貢獻,用於替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 擁有簡潔的 API、高效的效能,並支援多種協議(HTTP/2 和 SPDY)。

1.3 HttpURLConnection

HttpURLConnection 是 Java 的標準類,它繼承自 URLConnection,可用於向指定網站傳送 GET 請求、POST 請求。HttpURLConnection 使用比較複雜,不像 HttpClient 那樣容易使用。

1.4 RestTemplate

RestTemplate 是 Spring 提供的用於訪問 Rest 服務的客戶端,RestTemplate 提供了多種便捷訪問遠端 HTTP 服務的方法,能夠大大提高客戶端的編寫效率。

上面介紹的是最常見的幾種呼叫介面的方法,我們下面要介紹的方法比上面的更簡單、方便,它就是 Feign。

Feign 是一個宣告式的 REST 客戶端,它能讓 REST 呼叫更加簡單。Feign 供了 HTTP 請求的模板,通過編寫簡單的介面和插入註解,就可以定義好 HTTP 請求的引數、格式、地址等資訊。

而 Feign 則會完全代理 HTTP 請求,我們只需要像呼叫方法一樣呼叫它就可以完成服務請求及相關處理。

Spring Cloud 對 Feign 進行了封裝,使其支援 SpringMVC 標準註解和 HttpMessageConverters。Feign 可以與 Eureka 和 Ribbon 組合使用以支援負載均衡。

2 在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”),程式碼如下所示。

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.yxkj.feignclient")
public class RestTemplateApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestTemplateApplication.class,args);
    }
}

2.1 使用Feign呼叫介面

定義一個 Feign 的客戶端,以介面形式存在,程式碼如下所示。

@FeignClient(value = "RESTTEMPLATE")
public interface UserRemoteClient {
    @GetMapping(value = "/user/hello")
    String hello();
}

首先我們來看介面上加的 @FeignClient 註解。這個註解標識當前是一個 Feign 的客戶端,value 屬性是對應的服務名稱,也就是你需要呼叫哪個服務中的介面。

定義方法時直接複製介面的定義即可,當然還有另一種做法,就是將介面單獨抽出來定義,然後在 Controller 中實現介面。

在呼叫的客戶端中也實現了介面,從而達到介面共用的目的。我這裡的做法是不共用的,即單獨建立一個 API Client 的公共專案,基於約定的模式,每寫一個介面就要對應寫一個呼叫的 Client,後面打成公共的 jar,這樣無論是哪個專案需要呼叫介面,只要引入公共的介面 SDK jar 即可,不用重新定義一遍了。

定義之後可以直接通過注入 UserRemoteClient 來呼叫,這對於開發人員來說就像呼叫本地方法一樣。

接下來採用 Feign 來呼叫 /house/hello 介面,程式碼如下所示。

@FeignClient(value = "RESTTEMPLATE")
public interface UserRemoteClient {
    @GetMapping(value = "/house/hello")
    String hello();
}

通過跟註釋掉的程式碼相比可以發現,我們的呼叫方式變得越來越簡單了,從最開始的指定地址,到後面通過 Eureka 中的服務名稱來呼叫,再到現在直接通過定義介面來呼叫。

2.2 Spring Cloud Feign的自定義配置及使用