javascript
Spring Cloud Alibaba - 13 OpenFeign应用篇
文章目錄
- What's Feign
- ( Ribbon+RestTemplate) Vs Feign
- Feign整合
- artisan-feign-api 子模塊構(gòu)建
- Step1 搞依賴
- Step2 修改打包方式
- Step3 編寫聲明式接口
- 調(diào)用工程 artisan-cloud-feign-order 構(gòu)建
- Step1 搞依賴
- Step2 搞注解
- Step3 搞調(diào)用 (像調(diào)用本地方式一樣調(diào)用遠程服務(wù))
- 服務(wù)提供方artisan-cloud-feign-product 構(gòu)建
- 測試
- 源碼
What’s Feign
Feign是Netflix開發(fā)的聲明式、模板化的HTTP客戶端,其靈感來自Retrofit、JAXRS-2.0以及WebSocket。
Feign可幫助我們更加便捷、優(yōu)雅地調(diào)用HTTP API.
在Spring Cloud中,使用Feign非常簡單——只需創(chuàng)建接口,并在接口上添加注解即可。
Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等。Spring Cloud對Feign進行了增強,使其支持SpringMVC注解.
另外還整合了Ribbon和Eureka,從而使得Feign的使用更加方便.
( Ribbon+RestTemplate) Vs Feign
前面的方式我們都是通過 Ribbon+RestTemplate 進行微服務(wù)調(diào)用 模式 , 那有什么弊端呢?
ResponseEntity<PayInfo> responseEntity = restTemplate.getForEntity(PAY_URI + orderInfo.getProductNo(), PayInfo.class);#Ribbon調(diào)用@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}兩個缺點:
如果構(gòu)建的URL非常復(fù)雜,傳遞參數(shù)是個問題。
同時當業(yè)務(wù)比較復(fù)雜,很難理解。
Feign整合
artisan-feign-api 子模塊構(gòu)建
采取開發(fā)中常用的套路 定義一個artisan-feign-api工程 ,用于單獨管理和其他服務(wù)的接口。類似于DAO, COMMON這種模塊
Step1 搞依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>Step2 修改打包方式
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId></plugin></plugins></build>該工程式一個普通的jar 不需要打可執(zhí)行的jar
Step3 編寫聲明式接口
@FeignClient(name = "artisan-product-center") public interface ProductCenterFeignApi {/*** 聲明式接口,遠程調(diào)用http://artisan-product-center/selectProductInfoById/{productNo}* @param productNo* @return*/@RequestMapping("/selectProductInfoById/{productNo}")ProductInfo selectProductInfoById(@PathVariable("productNo") String productNo);}這個聲明式接口怎么寫呢? --------- 直接把Controller接口 Copy過來即可。
調(diào)用工程 artisan-cloud-feign-order 構(gòu)建
Step1 搞依賴
<dependency><groupId>com.artisan</groupId><artifactId>artisan-feign-api</artifactId><version>1.0-SNAPSHOT</version></dependency>引入剛才的子模塊,因為依賴是傳遞的,所以也相當于引用了feign ,這里僅引用子模塊即可。
Step2 搞注解
開啟注解加入 @EnableFeignClients
Step3 搞調(diào)用 (像調(diào)用本地方式一樣調(diào)用遠程服務(wù))
服務(wù)提供方artisan-cloud-feign-product 構(gòu)建
同普通工程一樣,無需改造
測試
啟動兩個服務(wù)
artisan-cloud-feign-order
artisan-cloud-feign-product
訪問Order服務(wù)提供的接口
源碼
https://github.com/yangshangwei/SpringCloudAlibabMaster
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud Alibaba - 13 OpenFeign应用篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Alibaba
- 下一篇: Spring Cloud Alibaba