pom.xml 如下:
bootstrap.yml 如下:
最後開啟服務的註冊與發現
service 和controller實現
筆者加入了swagger,如果需要只需加入如下依賴和配置:
至此,spring cloud與zookeeper的整合就完成了,調用結果如下:
為了測試與Feign的整合,再構建壹個消費者:與上述構建的過程類似。
pom.xml 增加spring-cloud-starter-openfeign依賴
bootstrap.yaml:
開啟服務註冊與發現,@EnableFeignClients註解註冊FeignClient
@FeignClient註冊聲明定義FeignClient,筆者以兩種方式定義了兩個FeignClient:
1.通過請求路徑定義FeignClient
2.通過生產者(即上述構建的helloService)暴露出來的接口定義FeignClient
controller 測試:
測試結果如下:
知道了如何將SpringCloud, Zookeeper 和Feign進行整合,我們知道了怎麽使用,更重要的是要知道裏面的原理,做到知其然更要知其所以然。
通過上述對整合過程的描述中可以發現,@EnableFeignClients和@FeignClient兩個註解是將Feign整合進Spring Cloud的重要組成部分,因此,從這兩個註解入手來了解Feign。
@EnableFeignClients註解通過@Import引入了FeignClientsRegistrar進行feign客戶端的註冊, 同時FeignClientsRegistrar通過實現ImportBeanDefinitionRegistrar來將bean註冊spring容器中:
至此,我們知道了通過@EnableFeignClients和@FeignClient兩個註解以及其相關屬性,在服務啟動時,將每個feign client 以及其對應的配置和每個客戶端通用的配置以bean的方式註冊完到spring容器中。
當使用@Autowired註解自動註入FeignClient時,Spring容器會使用註冊FeignClient用到的FeignClientFactoryBean為其生成FeignClient實例。
默認使用的targeter是HystrixTargeter,根據builder的類型設置不同的屬性,並生產Feign client
從上面的分析可以得出,當服務啟動時,通過@EnableFeignClients註解,啟動對標註了@FeignClient註解的類進行掃描和註冊,通過FeignClientFactoryBean將FeignClient註冊到Spring容器中。當使用@Autowired註解進行自動註入時,註冊到Spring容器中FeignClient會以動態代理的形式註入,這些動態代理中包含了接口方法的methodHandler用以處理調用轉發。