Spring Cloud Netflix的3大元件應用 Eureka&Ribbon&Hystrix
參考:http://blog.csdn.net/a60782885/article/details/69267934
服務發現:(Eureka)
前面提到,Eureka分為服務端和客戶端,服務端是服務註冊中心,而客戶端是提供服務的。
建立服務註冊中心(服務端)
首先在pom檔案中加入以下依賴:
在Application檔案中增加@EnableEurekaServer註解,表明這是服務端
在預設設定下,該服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為。在application.properties或yml中禁止客戶端註冊行為,否則會報錯。
服務端就寫好了,可以訪問localhost:1111進行訪問。可以看到,這時候是沒有服務的。
接下來建立客戶端
建立客戶端,並在註冊中心中註冊自己。
還是首先新增依賴:這裡和上面不同的地方只有對Eureka的依賴。
在Application檔案中加入@EnableDiscoveryClient註解,表明這是一個客戶端。
然後我們需要向註冊中心中註冊自己,只需要在application.properties或yml檔案中增加配置即可:
defaultZone指定了服務註冊中心的位置。
註冊了之後我們就可以在客戶端編寫客戶端提供的服務了。比如這裡提供了add加法服務。
在提供的服務中,只需要使用DiscoveryClient就可以得到關於呼叫者的資訊。
客戶端也完成了,這個時候可以再次訪問localhost:1111。
可以發現,客戶端已經在服務端上註冊了。
我們看一下架構圖:
很顯然,工作流程是這樣的:Service Consumer -> Proxy Server -> Client(Load Balancer) -> Servie Discovery -> Target Service
我們編寫好了上圖的紅色的部分,接下來應該對服務進行負載均衡了,也就是對客戶端的負載均衡,我們使用Ribbon來完成這件事。
首先我們啟動服務端和兩個客戶端,客戶端分別開在2222和2223埠。即:
開啟了兩個服務,接下來我們使用Ribbon進行負載均衡。
新建一個專案。
在pom檔案中新增如下依賴:
使用@EnableDiscoveryClient註解在將其註冊在註冊中心。並且提供一個返回RestTemplate的bean例項,使用@LoadBalanced註解對這個例項進行負載均衡這樣,使用這個例項去獲取服務的時候,就會幫我們進行負載均衡了。
在application.properties中註冊:
建立了bean例項,我們就可以通過@Autowired來獲取這個RestTemplate了,並且使用這個例項去呼叫服務。
啟動這個專案,並且訪問多次localhost:3333/add可以發現確實進行了負載均衡。
在微服務架構中,服務被拆分成一個一個的單元,各個單元之間相互依賴呼叫。如果某個單元由於網路原因或者別的單元故障奔潰,那麼會直接導致呼叫方對外的服務也發生延遲。若此時呼叫方的請求不斷增加,最後就會出現因等待出現故障的依賴方響應而形成任務積壓,最終導致自身服務的癱瘓,這樣的結構相對於傳統的web開發模式來說更加可怕,為了解決這個問題,我們可以採用斷路器。
在分散式架構中,當某個服務單元發生故障,使用斷路器返回一個錯誤的相應,而不是進行長時間的等待,這樣就不會使得執行緒被長時間佔用,導致伺服器的癱瘓。
Spring Cloud提供了Hystrix這麼一個元件來實現斷路器的功能。
首先啟動Eureka服務端和客戶端。
對Ribbon的專案進行以下修改:
首先在pom檔案中增加以下依賴:
在application中增加@EnableCircuitBreaker註解,表明使用斷路器。
Hystrix使用訊息佇列的方式,如果連線的服務崩潰,則非同步回撥某個方法進行處理。
新增一個Service類,在這個類中定義好如何訪問,以及失敗之後的返回等。
這裡重點是@HystrixCommand註解:表明該方法為hystrix包裹,可以對依賴服務進行隔離、降級、快速失敗、快速重試等等hystrix相關功能
列舉幾個屬性:
1. fallbackMethod 降級方法
2. commandProperties 普通配置屬性,可以配置HystrixCommand對應屬性,例如採用執行緒池還是訊號量隔離、熔斷器熔斷規則等等
3. ignoreExceptions 忽略的異常,預設HystrixBadRequestException不計入失敗
4. groupKey() 組名稱,預設使用類名稱
5. commandKey 命令名稱,預設使用方法名
最後修改一下Controller即可:
對於斷路器,針對生產環境,,Netflix還給我們準備了一個非常好用的運維工具, 那就是Hystrix Dashboard和Turbine.可以幫助我們更好的觀察。
當客戶端關閉時訪問:
客戶端啟動時訪問:
成功!
相關文章
- Spring Boot整合Spring Cloud Netflix元件Spring BootCloud元件
- Spring Cloud正式移除Hystrix、Zuul等Netflix OSS元件SpringCloudZuul元件
- Spring Cloud 關於:Spring Cloud Netflix HystrixSpringCloud
- Spring Cloud Netflix—使用EurekaClientSpringCloudclient
- Spring Cloud 2021.0.1 移除了Hystrix、Zuul等Netflix元件SpringCloudZuul元件
- Spring Cloud Netflix—如何加入HystrixSpringCloud
- Spring Cloud在Netflix後時代的走向?SpringCloud
- spring cloud微服務分散式雲架構-Spring Cloud NetflixSpringCloud微服務分散式架構
- Spring Cloud Feign 應用SpringCloud
- 我是如何替換Spring Cloud Netflix的?SpringCloud
- Spring Cloud應用(一)---eureka使用SpringCloud
- Spring Cloud Hystrix應用篇(十一)SpringCloud
- Spring Cloud Gateway應用篇(十三)SpringCloudGateway
- Spring Cloud 中的元件介紹SpringCloud元件
- Spring Cloud元件完整demoSpringCloud元件
- Spring Cloud應用(二)---ribbon使用SpringCloud
- 部署Azure Spring Cloud微服務應用SpringCloud微服務
- Spring Cloud應用(三)---feign使用SpringCloud
- Spring Cloud Netflix—自定義Ribbon客戶端SpringCloud客戶端
- Spring Cloud Netflix—斷路器:Hystrix客戶端SpringCloud客戶端
- Spring Cloud Netflix 概覽和架構設計SpringCloud架構
- Spring Cloud各個元件的配套使用SpringCloud元件
- Spring Cloud的應用程式—上下文服務SpringCloud
- Spring Cloud Config應用篇(九)SpringCloud
- Spring Cloud系列(二):Eureka應用詳解SpringCloud
- Spring Cloud Netflix—示例在Ribbon中禁用Eureka使用SpringCloud
- Spring Cloud Netflix—宣告性REST客戶端:FeignSpringCloudREST客戶端
- Spring Cloud Netflix—服務發現:Eureka伺服器SpringCloud伺服器
- 最完整的 Spring Cloud 元件-訊息中介軟體 Spring Cloud Stream 使用教程SpringCloud元件
- Spring Cloud Alibaba系列(六)sentinel的實際應用SpringCloud
- Spring Boot 和 Spring Cloud 應用記憶體如何管理?Spring BootCloud記憶體
- Spring Cloud底層原理(核心元件)SpringCloud元件
- Spring Cloud Alibaba元件之SentinelSpringCloud元件
- Spring Cloud Sleuth鏈路監控應用(十四)SpringCloud
- Spring Cloud整合Thrift RPC(二) - 應用案例SpringCloudRPC
- React元件應用於Spring MVC工程React元件SpringMVC
- Spring+ Spring cloud + SSO單點登入應用認證SpringCloud
- spring cloud alibaba系列(二)Sentinel應用的限流管理SpringCloud