Spring Cloud Alibaba遷移指南2:一行程式碼從Hystrix遷移到Sentinel
前段時間,Netflix宣佈Hystrix進入維護模式,詳見Hystrix停止開發,我們該何去何從? ,而Spring Cloud亦宣佈Spring Cloud Netflix進入維護狀態,後續不再進行更新已成為事實。作為開發者的我們,如何使用極簡的方式替換Hystrix成為首要解決的問題。
Hystrix宣佈停止維護 後,社群推薦了
Sentinel | Hystrix | resilience4j | |
---|---|---|---|
隔離策略 | 訊號量隔離(併發執行緒數限流) | 執行緒池隔離/訊號量隔離 | 訊號量隔離 |
熔斷降級策略 | 基於響應時間、異常比率、異常數 | 基於異常比率 | 基於異常比率、響應時間 |
實時統計實現 | 滑動視窗(LeapArray) | 滑動視窗(基於 RxJava) | Ring Bit Buffer |
動態規則配置 | 支援多種資料來源 | 支援多種資料來源 | 有限支援 |
擴充套件性 | 多個擴充套件點 | 外掛的形式 | 介面的形式 |
基於註解的支援 | 支援 | 支援 | 支援 |
限流 | 基於 QPS,支援基於呼叫關係的限流 | 有限的支援 | Rate Limiter |
流量整形 | 支援預熱模式、勻速器模式、預熱排隊模式 | 不支援 | 簡單的 Rate Limiter 模式 |
系統自適應保護 | 支援 | 不支援 | 不支援 |
控制檯 | 提供開箱即用的控制檯,可配置規則、檢視秒級監控、機器發現等 | 簡單的監控檢視 | 不提供控制檯,可對接其它監控系統 |
目前,Sentinel 在 Spring Cloud Alibaba中已適配Spring Cloud體系,完全可用來替代 Hystrix 的功能。不僅如此,阿里內部很多產品線都已使用Sentinel實現限流降級,Sentinel是經過生產流量大規模驗證的。
下面來探討如何從Hystrix遷移至Sentinel——
Spring Cloud Alibaba Sentinel 代替 Hystrix
要想使用Spring Cloud Alibaba Sentinel,需新增如下依賴,並去除Spring Cloud Netflix Hystrix( spring-cloud-starter-netflix-hystrix
)的依賴。
1 2 3 4 5 |
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel</artifactId> <version>0.2.1.RELEASE</version> </dependency> |
0程式碼修改相容Feign
加上Feign的依賴:
1 2 3 4 5 |
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${latest.version}</version> </dependency> |
在application.yml
中新增feign.sentinel.enabled=true
即可為Feign啟用Sentinel支援:
1 2 3 4 |
# 去掉 # feign.hystrix.enabled: true # 改為如下即可 feign.sentinel.enabled: true |
Feign Client無需修改:
1 2 3 4 5 6 7 8 |
@FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); @RequestMapping(value = "/echo/save", method = RequestMethod.POST) String save(Foo foo); } |
對於這個 EchoService
,echo方法對應的資源名是 GET:http://service-provider/echo/{str}
, save 方法對應的資源名是 POST:http://service-provider/echo/save
。
只需配置這些規則,限流降級操作即可生效。
一行程式碼支援RestTemplate
Sentinel與Spring生態的 RestTemplate
也進行了整合,可對 RestTemplate
請求過程進行限流和降級,只需在構造 RestTemplate 的時候加上 @SentinelRestTemplate
註解即可,如下所示:
1 2 3 4 5 |
@Bean @SentinelRestTemplate public RestTemplate restTemplate() { return new RestTemplate(); } |
開發十年,就只剩下這套架構體系了!
>>>
自 Spring Cloud 官方宣佈 Spring Cloud Netflix
自 Spring Cloud 官方宣佈 Spring Cloud Netflix 關於 lis maven lee work 啟動 默認 hystrix alibaba 自 Spring Cloud 官方宣布 Spring Cloud Netflix 進入維護狀態後,我們開始制作《Spring Cloud Alibaba遷移指南》系列文章,向開發者提供更
自 Spring Cloud 官方宣佈 Spring Cloud Netflix 什麽 docs -c 構建 .project per releases 會有 gist 自Spring Cloud Alibaba發布第一個Release以來,就備受國內開發者的高度關註。雖然Spring Cloud Alibaba還沒能納入Spring Cloud的主版本 功能 code vat learn master public http stp spa 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的註冊與發現,同時也介紹如何通過LoadB 方案 用戶 per 回顧 應用名 增加 我們 pla 基礎 前情回顧:
《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》
《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式(RestTemplate、WebCl space info master 分享 fresh 覆蓋 aid hle 過程 前情回顧:
《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》
《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》
《Sprin cati esc lis 調用 tor 選項 選擇 XML 參考 通過上一篇《使用Sentinel實現接口限流》的介紹,相信大家對Sentinel已經有了初步的認識。在Spring Cloud Alibaba的整合封裝之下,接口限流這件事情可以非常輕易的整合到我們的Spri 進行 詳細介紹 serve 相關 handle tor 集群模式 詳細 keep 上一篇我們介紹了如何通過Nacos的配置功能來存儲限流規則。Apollo是國內用戶非常多的配置中心,所以,今天我們繼續說說Spring Cloud Alibaba Sentinel中如何將流控 端口 turn ppi body 關於 dep vat lan autowired 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的註冊與發現,同時也介紹如何通過LoadBala 在之前的兩篇教程中我們分別介紹瞭如何將Sentinel的限流規則儲存到Nacos和Apollo中。同時,在文末的思考中,我都指出了這兩套整合方案都存在一個不足之處:不論採用什麼配置中心,限流規則都只能通過Nacos介面或Apollo介面來完成修改才能得到持久化儲存,而在Sentinel Dashboard中修 上一篇我們介紹瞭如何通過改造Sentinel Dashboard來實現修改規則之後自動同步到Apollo。下面通過這篇,詳細介紹當使用Nacos作為配置中心之後,如何實現Sentinel Dashboard中修改規則同步到Nacos。關於下面改造的原理和分析可以見上一篇《Sentinel Dashboard中 Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰
Springboot: 2.1.8.RELEASE
SpringCloud: Greenwich.SR2
1. Sentinel控制檯概述
在介紹入門實戰之前,先來介紹一下Sentinel。Sentinel Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵進階實戰
在閱讀本文前,建議先閱讀《Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰》。
1. Sentinel整合Feign和RestTemplate
Sentinel目前已經 Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵動態限流規則
前面幾篇文章較為詳細的介紹了Sentinel的使用姿勢,還沒看過的小夥伴可以訪問以下連結檢視:
《Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰》
《Sprin 隨著微服務概念的流行,越來越多的公司採用Spring Cloud全家桶構建微服務系統,實現業務的快速迭代。Spring Cloud提供了快速構建分散式微服務常用元件,包括Spring Cloud Eureka、Spring Cloud Ribbon、Spring Cloud Hystrix、Spring Cl @[toc]
## 背景
- 在上篇文章[《Spring Cloud Alibaba微服務生態的基礎實踐》](https://www.cnblogs.com/zhuhuix/p/13679153.html)中,我們初步瞭解了`Spring Cloud Alibaba`微服務生態體系,並動手實踐了`Nacos` 消費 ring str frame emp default class a template pom.xml 使用LoadBalancerClient在Spring Cloud Commons中提供了大量的與服務治理相關的抽象接口,包括DiscoveryClient、這裏我 @SentinelRestTemplate
註解還暴露出了對應的屬性可進行限流降級後的自定義錯誤,預設的行為是返回 “RestTemplate request block by sentinel” 資訊。關於 @SentinelRestTemplate
的詳細資訊可以參考
相關推薦
Spring Cloud Alibaba遷移指南2:一行程式碼從Hystrix遷移到Sentinel
Spring Cloud Alibaba遷移指南(一):一行程式碼從 Hystrix 遷移到 Sentinel
Spring Cloud Alibaba遷移指南(二):零程式碼替換 Eureka
Spring Cloud Alibaba遷移指南(二):零代碼替換 Eureka
Spring Cloud Alibaba遷移指南(三):極簡的 Config
Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現
Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式(RestTemplate、WebClient、Feign)
Spring Cloud Alibaba基礎教程:Nacos配置的加載規則詳解
Spring Cloud Alibaba基礎教程:Nacos配置的多文件加載與共享配置
Spring Cloud Alibaba基礎教程:Sentinel使用Nacos存儲規則
Spring Cloud Alibaba基礎教程:Sentinel使用Apollo存儲規則
Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式
Spring Cloud Alibaba基礎教程:Sentinel Dashboard同步Apollo儲存規則
Spring Cloud Alibaba基礎教程:Sentinel Dashboard中修改規則同步到Nacos
Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰
Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵進階實戰
Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵動態限流規則
Spring Cloud Alibaba基礎教程:Nacos服務發現與配置管理
Spring Cloud Alibaba生態探索:Dubbo、Nacos及Sentinel的完美結合
Spring Cloud構建微服務架構:服務消費(基礎)