8.1、分析
之前我們通過RestTemplate調用Rest服務,代碼是這樣的:雖然使用了Ribbon和Hystrix可以實現(xiàn)負載均衡和容錯處理膊存,但是這個編碼在實現(xiàn)大量業(yè)務時會顯得太過于冗余(如导而,多參數得URL拼接)。
8.2隔崎、Feign簡介
官網:https://github.com/OpenFeign/feign
Feign是一個Netflix開發(fā)得聲明式今艺、模塊化得HTTP客戶端,其靈感來自Retrofit爵卒、JAXRS-2.0以及WebSocket虚缎。Feign可以幫助我們更加便捷、優(yōu)雅地調用HTTP API钓株。
在Spring Cloud中实牡,使用Feign非常簡單————創(chuàng)建一個接口,并在接口上添加一些注解轴合,代碼就完成了创坞。Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等受葛。
Spring Cloud對Feign進行了增強题涨,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,從而讓Feign的使用更加方便总滩。
8.3携栋、快速入門
在訂單微服務中增加Feign的支持。
8.3.1咳秉、導入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
8.3.2、創(chuàng)建一個ItemFeignClient接口
package cn.zuoqy.springclouddemoorder.feign;
import cn.zuoqy.springclouddemoorder.model.Item;
import [org.springframework.cloud.netflix.feign](http://org.springframework.cloud.netflix.feign/).FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by zuoqy on 17:24 2018/10/26.
*/
@FeignClient(value = "springcloud-demo-item")//聲明這是一個Feign客戶端鸯隅,并且指明服務器id
public interface ItemFeignClient {
// 這里定義了類似于SpringMvc用法的方法澜建,就可以進行Restful的調用了
@RequestMapping(value = "/item/query/{id}", method=RequestMethod.GET)
public Item queryItemById(@PathVariable("id") Long id);
}
8.3.3、改造ItemService
8.3.4蝌以、在啟動類中添加@EnableFeignClients注解
8.3.5炕舵、重啟測試
測試結果,一切正常跟畅。
8.4咽筋、流程分析
1、由于我們在入口@EnableFeignClients注解徊件,Spring啟動后會掃描標注了@FeignClient注解的接口奸攻,然后生成代理類蒜危。
2、我們在@FeignClient接口中指定了value睹耐,其實就是指定了在Eureka中的服務名稱
3辐赞、在FeignClient中定義方法以及使用了Spring Mvc的注解,F(xiàn)eign就會根據注解中的內容生成對應的url硝训,然后基于Ribbon的負載均衡去調用REST服務
- a)响委、為什么使用的是SpringMVC的注解?
i.其實,F(xiàn)eign是有自己的注解的窖梁,是因為SpringCloud對Feign做了增強赘风,兼容了SpringMVC的注解,使我們的學習成本更低
i png
ii.專業(yè)的解釋是這樣的:
org.springframework.cloud.netflix.feign.FeignClientsConfiguration
ii.png
設置默認的契約是SpringMVC契約
8.5纵刘、Feign的多參數構造
Spring Cloud—一邀窃、微服務架構
Spring Cloud—二、Spring Cloud簡介
Spring Cloud—三彰导、使用Spring Cloud實現(xiàn)微服務
Spring Cloud—四蛔翅、Spring Cloud快速入門
Spring Cloud—五、注冊中心Eureka
Spring Cloud—六位谋、使用Ribbon實現(xiàn)負載均衡
Spring Cloud—七山析、容錯保護:Hystrix
Spring Cloud—八、使用Feign實現(xiàn)聲明式的Rest調用
Spring Cloud—九掏父、服務網關Spring Cloud Zuul
Spring Cloud—十笋轨、使用Spring Cloud Config統(tǒng)一管理微服務
Spring Cloud—十一、使用Spring Cloud Bus(消息總線)實現(xiàn)自動更新