連載:3-spring-cloud-feign
宣告式呼叫Feign
【GitHub地址:https://github.com/NullPointer8023/eureka】
一、搭建feign客戶端
承接上篇,專案中已經包含了eureka(3個例項)、client(2個例項),新建一個module,名為eureka-feign-client。
1、專案結構
2、pom.xml
引入feign的依賴
3、application.yml
新增feign的相關配置,feign以服務的方式註冊到配置中心,所以同樣配置服務的埠號、服務名及對應要註冊的eureka服務。
4、啟動類FeignApplication
首先feign以client註冊在eureka中,所以在程式啟動類上需要加入@EnableEurekaClient,同時加入@EnableFeignClients註解開啟Feign Client的功能。
5、新建配置類
在類上新增@Configuration註解,宣告該類為配置類,並注入一個BeanName為feignRetryer的Retryer的Bean。
注入該bean之後,Feign在遠端呼叫失敗後會進行重試,預設是不重試,Retryer.NEVER_RETRY。
通過覆蓋了預設的Retryer的bean,更改了該FeignClient的請求失敗重試的策略,重試間隔為100毫秒,最大重試時間為1秒,重試次數為5次。
6、實現Feign Client
新建一個EurekaClientFeign的介面,在介面上新增@FeignClient標籤,讓feign能夠掃描到相關配置。
7、建立service層,通過EurekaClientFeign介面去遠端呼叫eureka-client服務。
目前IDEA環境中提升的不能@Autowired沒有發現如何去掉,但不影響服務的正常使用
8、編寫controller
正常開啟@RestController功能,呼叫service中的方法
9、到此所有程式碼準備工作完成,啟動eureka服務,分別註冊2個client,啟動feign,作為一個服務註冊到eureka server中。
通過訪問feign client,內部呼叫client兩個例項,會發現自帶負載均衡效果,會打到兩臺不同的例項上。
二、分析
1、檢視起步依賴spring-cloud-start-feign的pom,可以檢視起步依賴中引入了ribbon和hystrix。FeignRibbonClientAutoConfiguration類配置了Client的型別(包括HttpURLConnection、OKHttp和HttpClient),最終向容器注入的是client的實現類LoadBalancerFeignClient,即負載均衡客戶端。
2、Feign是一個偽Java Http客戶端,Feign不做任何的請求處理。Feign通過處理註解生成Request模板,從而簡化了Http API的開發。開發人員可以使用註解的方式定製Request API模板。在傳送Http Request請求之前,Feign通過處理註解的方式替換掉Request模板中的引數,生成真正的Request,並交給Java Http客戶端去處理。利用這種方式,卡發著只需要關注Feign註解模板的開發,而不用關注Http請求本身,簡化了Http請求的過程,使得Http請求變得簡單和容易理解。