SpringCloud之遠程調用OpenFeign和Ribbon


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;

在服務端按照方法的調用即可。

 

 

 

Feign中http連接池優化

https://www.jianshu.com/p/8bca50cb11d8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM