Ribbon、Feign和OpenFeign的區別
SpringCloudAlibaba微服務實戰教程系列
Spring Cloud 微服務架構學習記錄與示例
一 簡介
Feign是Netflflix開發的⼀個輕量級RESTful的HTTP服務客戶端(⽤它來發起請求,遠程調⽤的),是以Java接⼝注解的⽅式調⽤Http請求,⽽不⽤像Java中通過封裝HTTP請求報⽂的⽅式直接調⽤,Feign被⼴泛應⽤在Spring Cloud 的解決⽅案中。類似於Dubbo,服務消費者拿到服務提供者的接⼝,然后像調⽤本地接⼝⽅法⼀樣去調⽤,實際發出的是遠程的請求。
- Feign可幫助我們更加便捷,優雅的調⽤HTTP API:不需要我們去拼接url然后呢調⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常簡單,創建⼀個接⼝(在消費者--服務調⽤⽅這⼀端),並在接⼝上添加⼀些注解,代碼就完成了
- SpringCloud對Feign進⾏了增強,使Feign⽀持了SpringMVC注解(OpenFeign)
本質:封裝了Http調⽤流程,更符合⾯向接⼝化的編程習慣,類似於Dubbo的服務調⽤
Dubbo的調⽤⽅式其實就是很好的⾯向接⼝編程
二、配置應用
(效果)Feign = RestTemplate+Ribbon+Hystrix
1、引入pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、服務消費者⼯程啟動類使⽤注解@EnableFeignClients添加Feign⽀持
@SpringBootApplication @EnableDiscoveryClient // 開啟服務發現 @EnableFeignClients // 開啟Feign public class AutodeliverFeignApplication8092 { public static void main(String[] args) { SpringApplication.run(AutodeliverFeignApplication8092.class,args); } }
注意:此時去掉Hystrix熔斷的⽀持注解@EnableCircuitBreaker即可包括引⼊的依賴,因為Feign會⾃動引⼊
3、創建Feign接⼝
// name:調⽤的服務名稱,和服務提供者yml⽂件中spring.application.name保持⼀致,可以使用url形式,則為直接調取,不走注冊中心 @FeignClient(name="city-service-resume") public interface CityFeignClient { //調⽤的請求路徑 @RequestMapping(value = "/city/openstate/{userId}",method=RequestMethod.GET) public Integer findOpenState(@PathVariable(value = "userId")Long userId); }
注意:
1)@FeignClient注解的name屬性⽤於指定要調⽤的服務提供者名稱,和服務提供者yml⽂件中spring.application.name保持⼀致
2)接⼝中的接⼝⽅法,就好⽐是遠程服務提供者Controller中的Hander⽅法(只不過如同本地調⽤了),那么在進⾏參數綁定的時,可以使⽤@PathVariable、@RequestParam、@RequestHeader等,這也是OpenFeign對SpringMVC注解的⽀持,但是需要注意value必須設置,否則會拋出異常
4、調用
@Autowired private CityFeignClient cityFeignClient;
在服務端按照方法的調用即可。
https://www.jianshu.com/p/8bca50cb11d8