Spring Cloud Feign
Spring Cloud Feign是一套基于Netflix Feign實(shí)現(xiàn)的聲明式服務(wù)調(diào)用客戶端犁跪。它使得編寫(xiě)Web服務(wù)客戶端變得更加簡(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客戶端實(shí)現(xiàn)逞刷。
下面嘉涌,我們通過(guò)一個(gè)例子來(lái)展現(xiàn)Feign如何方便的聲明對(duì)eureka-client服務(wù)的定義和調(diào)用。
下面的例子夸浅,我們將利用之前構(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中增加下面的依賴:
<dependencies>
...
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-feignartifactId>
dependency>
dependencies>
修改應(yīng)用主類预皇。通過(guò)@EnableFeignClients注解開(kāi)啟掃描Spring Cloud Feign客戶端的功能:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public?class?Application?{
public?static?void?main(String[] args)?{
new?SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
創(chuàng)建一個(gè)Feign的客戶端接口定義。使用@FeignClient注解來(lái)指定這個(gè)接口所要調(diào)用的服務(wù)名稱婉刀,接口中定義的各個(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客戶端來(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)一的生命我們需要依賴的微服務(wù)接口鲁豪。而在具體使用的時(shí)候就跟調(diào)用本地方法一點(diǎn)的進(jìn)行調(diào)用即可潘悼。由于Feign是基于Ribbon實(shí)現(xiàn)的,所以它自帶了客戶端負(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)大家入門之后郭宝,我們?cè)俳Y(jié)合介紹Feign中的Hystrix以及配置方式辞槐。
在完成了上面你的代碼編寫(xiě)之后,讀者可以將eureka-server粘室、eureka-client榄檬、eureka-consumer-feign都啟動(dòng)起來(lái),來(lái)跟蹤觀察eureka-consumer-feign服務(wù)是如何消費(fèi)eureka-client服務(wù)的/dc接口的衔统,并且也可以通過(guò)啟動(dòng)多個(gè)eureka-client服務(wù)來(lái)觀察其負(fù)載均衡的效果鹿榜。
從現(xiàn)在開(kāi)始,我這邊會(huì)將近期研發(fā)的springcloud微服務(wù)云架構(gòu)的搭建過(guò)程和精髓記錄下來(lái)锦爵,幫助更多有興趣研發(fā)spring cloud框架的朋友舱殿,希望可以幫助更多的好學(xué)者。大家來(lái)一起探討spring cloud架構(gòu)的搭建過(guò)程及如何運(yùn)用于企業(yè)項(xiàng)目险掀。源碼來(lái)源