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)用恰力。我們將利用之前構(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):
org.springframework.cloud
spring-cloud-starter-feign
...
org.springframework.cloud
spring-cloud-starter-feign
修改應(yīng)用主類(lèi)。通過(guò)@EnableFeignClients注解開(kāi)啟掃描Spring Cloud Feign客戶(hù)端的功能:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
publicclassApplication{
publicstaticvoidmain(String[] args){
newSpringApplicationBuilder(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")
publicinterfaceDcClient{
@GetMapping("/dc")
Stringconsumer();
}
修改Controller叹洲。通過(guò)定義的feign客戶(hù)端來(lái)調(diào)用服務(wù)提供方的接口:
@RestController
publicclassDcController{
@Autowired
DcClient dcClient;
@GetMapping("/consumer")
publicStringdc(){
returndcClient.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à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)源