通過(guò)前兩篇《Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)消費(fèi)(基礎(chǔ))》和《Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)消費(fèi)(Ribbon)》担忧,我們已經(jīng)學(xué)會(huì)了在Spring Cloud中基本的服務(wù)調(diào)用方式。本文我們將繼續(xù)介紹Spring Cloud中的另外一個(gè)服務(wù)消費(fèi)的工具:Spring Cloud Feign最欠。
Spring Cloud Feign
Spring Cloud Feign是一套基于Netflix Feign實(shí)現(xiàn)的聲明式服務(wù)調(diào)用客戶(hù)端芝硬。它使得編寫(xiě)Web服務(wù)客戶(hù)端變得更加簡(jiǎn)單轧房。我們只需要通過(guò)創(chuàng)建接口并用注解來(lái)配置它既可完成對(duì)Web服務(wù)接口的綁定。它具備可插拔的注解支持迟赃,包括Feign注解实辑、JAX-RS注解藻丢。它也支持可插拔的編碼器和解碼器悠反。Spring Cloud Feign還擴(kuò)展了對(duì)Spring MVC注解的支持,同時(shí)還整合了Ribbon和Eureka來(lái)提供均衡負(fù)載的HTTP客戶(hù)端實(shí)現(xiàn)梨水。
下面茵臭,我們通過(guò)一個(gè)例子來(lái)展現(xiàn)Feign如何方便的聲明對(duì)eureka-client服務(wù)的定義和調(diào)用。
動(dòng)手試一試
下面的例子奇徒,我們將利用之前構(gòu)建的eureka-server
作為服務(wù)注冊(cè)中心、eureka-client
作為服務(wù)提供者作為基礎(chǔ)摩钙。而基于Spring Cloud Ribbon實(shí)現(xiàn)的消費(fèi)者,我們可以根據(jù)eureka-consumer
實(shí)現(xiàn)的內(nèi)容進(jìn)行簡(jiǎn)單改在就能完成网持,具體步驟如下:
- 根據(jù)
eureka-consumer
復(fù)制一個(gè)服務(wù)消費(fèi)者工程长踊,命名為:eureka-consumer-feign
身弊。在pom.xml
中增加下面的依賴(lài):
<dependencies>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
- 修改應(yīng)用主類(lèi)。通過(guò)
@EnableFeignClients
注解開(kāi)啟掃描Spring Cloud Feign客戶(hù)端的功能:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
- 創(chuàng)建一個(gè)Feign的客戶(hù)端接口定義莉擒。使用
@FeignClient
注解來(lái)指定這個(gè)接口所要調(diào)用的服務(wù)名稱(chēng)涨冀,接口中定義的各個(gè)函數(shù)使用Spring MVC的注解就可以來(lái)綁定服務(wù)提供方的REST接口麦萤,比如下面就是綁定eureka-client
服務(wù)的/dc
接口的例子:
@FeignClient("eureka-client")
public interface DcClient {
@GetMapping("/dc")
String consumer();
}
- 修改Controller。通過(guò)定義的feign客戶(hù)端來(lái)調(diào)用服務(wù)提供方的接口:
@RestController
public class DcController {
@Autowired
DcClient dcClient;
@GetMapping("/consumer")
public String dc() {
return dcClient.consumer();
}
}
通過(guò)Spring Cloud Feign來(lái)實(shí)現(xiàn)服務(wù)調(diào)用的方式更加簡(jiǎn)單了翅帜,通過(guò)@FeignClient
定義的接口來(lái)統(tǒng)一的生命我們需要依賴(lài)的微服務(wù)接口涝滴。而在具體使用的時(shí)候就跟調(diào)用本地方法一點(diǎn)的進(jìn)行調(diào)用即可胶台。由于Feign是基于Ribbon實(shí)現(xiàn)的,所以它自帶了客戶(hù)端負(fù)載均衡功能韩脏,也可以通過(guò)Ribbon的IRule進(jìn)行策略擴(kuò)展赡矢。另外,F(xiàn)eign還整合的Hystrix來(lái)實(shí)現(xiàn)服務(wù)的容錯(cuò)保護(hù)吹散,在Dalston版本中,F(xiàn)eign的Hystrix默認(rèn)是關(guān)閉的梦谜。待后文介紹Hystrix帶領(lǐng)大家入門(mén)之后袭景,我們?cè)俳Y(jié)合介紹Feign中的Hystrix以及配置方式。
在完成了上面你的代碼編寫(xiě)之后荒澡,讀者可以將eureka-server与殃、eureka-client、eureka-consumer-feign都啟動(dòng)起來(lái)米奸,然后訪問(wèn)http://localhost:2101/consumer 悴晰,來(lái)跟蹤觀察eureka-consumer-feign服務(wù)是如何消費(fèi)eureka-client服務(wù)的/dc
接口的逐工,并且也可以通過(guò)啟動(dòng)多個(gè)eureka-client服務(wù)來(lái)觀察其負(fù)載均衡的效果。
更多Spring Cloud內(nèi)容請(qǐng)持續(xù)關(guān)注我的博客更新或在《Spring Cloud微服務(wù)實(shí)戰(zhàn)》中獲取棕硫。
代碼示例
樣例工程將沿用之前在碼云和GitHub上創(chuàng)建的SpringCloud-Learning項(xiàng)目哈扮,重新做了一下整理瘤泪。通過(guò)不同目錄來(lái)區(qū)分Brixton和Dalston的示例。
- 碼云:點(diǎn)擊查看
- GitHub:點(diǎn)擊查看
具體工程說(shuō)明如下:
- eureka的服務(wù)注冊(cè)中心:eureka-server
- eureka的服務(wù)提供方:eureka-client
- eureka的服務(wù)消費(fèi)者:eureka-consumer-feign