日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例

發布時間:2023/12/3 javascript 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??實踐出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真實案例

Eureka是Spring Cloud Eureka的簡稱,是Netflix提供的組件之一。通過Eureka可以提供服務注冊、發現、負載均衡、降級、熔斷等功能。本篇主要介紹Eureka作為服務注冊中心,以及實現一個基本的負載均衡服務。

1. 為什么需要Eureka

對于一個大型系統來說,不可避免的會存在各種子系統之間的調用關系,比如一個子系統A請求子系統B的服務:

與此同時隨著用戶量的增加,或者服務本身的迭代,會加入更多的調用關系:

如上圖所示,子系統間的調用關系會隨著項目迭代變得異常復雜,任何一個項目的改動,都會牽連好幾個項目跟著重啟。如果服務提供方(B、D)的IP變動,調用方就要重啟以應對這種變化。

Eureka提供了一種服務注冊及發現的服務,當引入服務注冊后,你的項目架構可變為:

通過服務注冊中心,任何子系統就不再需要關注服務提供方的IP地址等信息,直接向服務中心請求調用即可。另外,Eureka也提供了負載均衡、監控節點、熔斷機制去除故障節點等功能。因此,對于分布式應用來說,Eureka可以發揮很大的作用。

2. 關于Eureka

根據第一小節的分析,我們可以把基于Eureka的架構歸納為如下圖:

可以看到包含Eureka框架中主要包括三個實體:Eureka Server、Client、Producer。

  • Eureka Server,服務注冊和發現,統一管理各種服務。

  • Client,消費者,面向客戶,服務的調用方。

  • Producer,服務生產者,服務的被調用方。

3. 關于Ribbon

Spring Cloud Ribbon也是Netflix公司開源的組件之一,主要提供了客戶端的負載均衡服務,可配合Eureka一起使用。Ribbon客戶端提供了一系列完善的配置選項,包括服務鏈接超時、重試機制等。Ribbon內置可插拔、可定制的負載均衡策略,包括:

  • 簡單輪詢策略

  • 加權響應時間

  • 區域感知

  • 隨機負載

4. 關于Feign

Feign是Netflix公司出品的聲明式Web服務調用端,我們只要創建接口并用它來調用已存在的接口即可。同時它還整合了Ribbon和Rureka來提供負載均衡的REST請求實現。以本文為例,客戶端CLient編寫一個Feign請求:

import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam;/*** Created by zhaoyh on 2018/1/03* @author zhaoyh*/ @FeignClient(name = "PRODUCER") public interface FeignService {@RequestMapping(value = "/api/calculate")String calculate(@RequestParam(value = "num") int num); }

如果想要使用該接口,可以以如下的方式:

@Autowired private FeignService feignService; @RequestMapping(value = "/requestByFeign/{num}", method = RequestMethod.GET) public String requestByFeign(@PathVariable(value = "num") int num) {String result = feignService.calculate(num);return result; }

關于Ribbon和Feign,我個人是這樣理解的:Ribbon是一個客戶端的負載均衡器;Feign更像是一個Http客戶端,用來請求Web接口服務。

5. 負載均衡案例實現

本案例就基于Eureka注冊中心,做一個簡單的具備服務注冊發現和負載均衡的應用。

案例需要你的主機配置如下環境:

軟件版本
JDK1.8
Maven2.0+

對于在第二節中介紹的三個實體,我們基于Spring Boot建立了三個對應的項目,都已push到github上了,可以直接點擊對應的項目clone下來。

github-Eureka Server

github-Client

github-Producer

5.1 案例說明

實現一個簡單的遠程調用,計算斐波那契數列的值并返回。

  • Client端:面向用戶,用戶查詢斐波那契的結果。

  • Producer端:提供計算結果。

  • Eureka Server:提供服務注冊。

5.2 啟動Eureka Server

cd springboot-eureka-server ./mvnw.sh clean install java -jar target/springboot-eureka-server-0.0.1.jar

然后打開瀏覽器,輸入 http://localhost:1111 ,此時沒有任何服務注冊進來,初始界面如下:

5.3 啟動Producer

為了達到負載均衡的效果,接下來我們就要啟動多個Producer的實例,首先:

cd springboot-loadbalance-server

修改applications.properties中port的值,每設置一個端口號,則打包一次:

./mvnw.sh clean install 保存 target/springboot-loadbalance-server-0.0.1.jar 到任意位置并執行。

我啟動了三個實例,分別是9092、9093、9094端口。重啟后,在http://localhost:1111中查看Eureka Server已收到我注冊的三個服務:

5.4 啟動Client

cd springboot-loadbalance-client ./mvnw.sh clean install java -jar target/springboot-loadbalance-client-0.0.1.jar

此時再打開注冊中心就會發現該客戶端也已經注冊成功了:

接下來就是要驗證請求服務啦,Client的端口號是9090。在客戶端的controller里,我實現了兩種請求方式,第一種是RestTemplate,這是Spring提供的一種請求restful接口的便捷模版;第二種是Neitflix公司的Feign。

使用RestTemplate模版的訪問鏈接 http://localhost:9090/requestByRestTemplate/10 ;使用Feign的訪問鏈接 http://localhost:9090/requestByFeign/10 。

由于我們默認采用輪詢的負載均衡策略,多刷新幾次,會看到不同的實例依次返回計算結果:

至此我們的服務注冊和簡單輪詢負載均衡就實現完了,有興趣的小伙伴可以直接從上文所述的github上把代碼star并clone下來體驗。

總結

以上是生活随笔為你收集整理的实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。