在講feign之前,還是先提下feign的概念,然後通過幾個簡單的案例來說明下如何去使用feign。
Feign是什麼呢?Feign是一個聲明式WebService用戶端。使用Feign能讓編寫Web Service用戶端更加簡單, 它的使用方法是定義一個接口,然後在上面添加注解,同時也支援JAX-RS标準的注解。Feign也支援可拔插式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支援了Spring MVC标準注解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支援負載均衡。
Feign旨在使編寫Java Http用戶端變得更容易。 前面在使用Ribbon+RestTemplate時,利用RestTemplate對http請求的封裝處理,形成了一套模版化的調用方法。但是在實際開發中,由于對服務依賴的調用可能不止一處,往往一個接口會被多處調用,是以通常都會針對每個微服務自行封裝一些用戶端類來包裝這些依賴服務的調用。是以,Feign在此基礎上做了進一步封裝,由他來幫助我們定義和實作依賴服務接口的定義。在Feign的實作下,我們隻需建立一個接口并使用注解的方式來配置它(以前是Dao接口上面标注Mapper注解,現在是一個微服務接口上面标注一個Feign注解即可),即可完成對服務提供方的接口綁定,簡化了使用Spring cloud Ribbon時,自動封裝服務調用用戶端的開發量。
那麼在應用中如何去使用我們的feign呢?當然首先肯定是需要在用戶端引入我們的feign依賴了。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
然後需要編寫一個interface,裡面放對應的server需要調用的所有服務,然後加上@FeignClient()注解即可:

如圖,microservice-order代表需要調用的微服務的名字,然後具體的方法表示需要調用的接口,
然後啟動類上需要加上一個注解,@EnableFeignClients表示開啟我們的feign支援。
具體調用的時候隻需要你将具體的feign類注入進來,然後調用相關方法即可。
可以看到,同樣完成了負載均衡效果。
而與Ribbon不同的是,通過feign隻需要定義服務綁定接口且以聲明式的方法,不用再代碼裡面寫很多的寫死,同時,減少了大量代碼備援,優雅而簡單的實作了服務調用。