深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
因為在公司最近的項目中,使用的架構是spring-cloud的微服務架構,然后正好公司組織了一次關于spring-cloud的相關的一些技術分享,故在此處將對于spring-cloud 中對于ribbon ,hystrix 和 feign的作用和關系做一個學習記錄,以方便以后查看。
Ribbon介紹
Ribbon是Netflix發布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。簡單的說,就是在配置文件中列出Load Balancer后面所有的機器,Ribbon會自動的幫助你基于某種規則(如簡單輪詢,隨機連接等)去連接這些機器。我們也很容易使用Ribbon實現自定義的負載均衡算法。簡單地說,Ribbon是一個客戶端負載均衡器。
Ribbon工作時分為兩步:第一步先選擇 Eureka Server, 它優先選擇在同一個Zone且負載較少的Server;第二步再根據用戶指定的策略,在從Server取到的服務注冊列表中選擇一個地址。其中Ribbon提供了多種策略,例如輪詢、隨機、根據響應時間加權等。
ribbon源碼的github地址:
https://github.com/Netflix/ribbon
Feign介紹
Feign是一個聲明式的web service客戶端,它使得編寫web service客戶端更為容易。創建接口,為接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,還支持熱插拔的編碼器和解碼器。Spring Cloud為Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka來為使用Feign時提供負載均衡。
feign源碼的github地址:
https://github.com/OpenFeign/feign
Hystrix介紹
Hystrix熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。在Spring Cloud Hystrix中實現了線程隔離、斷路器等一系列的服務保護功能。它也是基于Netflix的開源框架 Hystrix實現的,該框架目標在于通過控制那些訪問遠程系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。Hystrix具備了服務降級、服務熔斷、線程隔離、請求緩存、請求合并以及服務監控等強大功能。
Hystrix源碼的github地址:
https://github.com/Netflix/hystrix
下面我們就來看一下在微服務中,如何快速的使用它們
在一個請求進入到我們系統之后,我們的系統具體是怎么的一個流程來處理的呢?可能每個同學都有自己的理解,下面我畫了一個圖來比較形象的描述我對于這些組件之間的關系的一個圖,有不對的地方,請大家批評指正:
具體使用
代碼實現示例
1.工程目錄結構
本次我們準備了4個工程模塊,分別是:
a.基于spring-boot的服務提供模塊:service-demo
b.基于eureka實現的服務注冊中心模塊:register-demo
c.消費方-配合ribbon和hystrix的模塊:consumer-ribbon-with-hystrix-demo
d.消費方-配合feign和hystrix的模塊:consumer-feign-with-hystrix-demo
項目結構
2.consumer-ribbon-with-hystrix-demo中的代碼說明
pom.xml配置
分別加入了hystrix/ribbon/eureka的pom依賴
user類實體類
user類
RibbonHystrixController類
RibbonHystrixController類
RibbonHystrixService類
RibbonHystrixService類
在這個類中通過注解
@HystrixCommand(fallbackMethod = "fallback")
和實現的fallback方法來實現短路保護
public User fallback(Long id)?
啟動類
通過注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate() { return new RestTemplate();}
實現調用方的負載均衡
測試實現效果
1.測試準備
a.啟動注冊中心服務register-demo
效果如下:
表示啟動成功
b.在瀏覽器中訪問地址:
http://localhost:8761/
能打開頁面,表示啟動成功,從圖中可以看到,目前沒有服務注冊進來。
c.我們啟動service-demo服務,注意需要啟動兩次service服務
注意在idea中默認相同的服務,重復啟動的話,會覆蓋之前的服務,如何啟動兩個服務呢?請看下圖:
點擊Edit 菜單
將單列啟動的限制勾選去掉,就可以了。注意,需要啟動兩次,需要修改application.yml文件中的端口號
效果如下:
表示啟動成功,并加入到了注冊中心。
從圖中我們可以看到,在瀏覽器中已經可以看到注冊上來的服務了,并且這個服務有兩個節點
d.我們啟動寫好的consumer-ribbon-with-hystrix-demo服務
效果如下:
2.通過postmain調用接口測試
a.測試調用6次接口
http://localhost:8011/ribbon/2
結果:輸出是在每個控制臺打印三次日志
b.關掉所有服務的時候,就會走到降級流程中
3.consumer-feign-with-hystrix-demo中的代碼說明
這個的配置就不一一闡述,所有工程的代碼,請需要的同學從github中下載測試。
在feign中使用hystrix斷路器的時候,一定要開啟一個配置,如果沒有開啟的話,默認是關閉的,不會走斷路器。
如下圖:
代碼地址:
Github地址:點擊查看
https://github.com/xiangfajun/spring-cloud-microservice-demo
本文參考的文獻地址:
http://blog.didispace.com/spring-cloud-starter-dalston-2-3/
http://blog.didispace.com/spring-cloud-starter-dalston-2-2/
http://blog.didispace.com/spring-cloud-starter-dalston-4-1/
http://blog.didispace.com/spring-cloud-starter-dalston-4-2/
http://blog.didispace.com/spring-cloud-starter-dalston-4-3/
http://book.itmuch.com
作者:o大笨象o
鏈接:https://www.jianshu.com/p/51c5e28c9574
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 野钓蓝鲫和野战蓝鲫是一个牌子吗?
- 下一篇: 月薪两万为什么在老乡鸡只能点三个肉菜?