1. 程式人生 > >Spring Cloud Alibaba遷移指南2:一行程式碼從Hystrix遷移到Sentinel

Spring Cloud Alibaba遷移指南2:一行程式碼從Hystrix遷移到Sentinel

開發十年,就只剩下這套架構體系了! >>>   

前段時間,Netflix宣佈Hystrix進入維護模式,詳見Hystrix停止開發,我們該何去何從? ,而Spring Cloud亦宣佈Spring Cloud Netflix進入維護狀態,後續不再進行更新已成為事實。作為開發者的我們,如何使用極簡的方式替換Hystrix成為首要解決的問題。

Hystrix宣佈停止維護 後,社群推薦了

Resilience4j ,而業界還有Alibaba Sentinel可供選擇——3款產品各有優勢,具體的功能差異參考下表(該表來自 Sentinel Wiki :

  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();
}

@SentinelRestTemplate 註解還暴露出了對應的屬性可進行限流降級後的自定義錯誤,預設的行為是返回 “RestTemplate request block by sentinel” 資訊。關於 @SentinelRestTemplate 的詳細資訊可以參考 

相關推薦

Spring Cloud Alibaba遷移指南2一行程式碼Hystrix遷移Sentinel

開發十年,就只剩下這套架構體系了! >>>   

Spring Cloud Alibaba遷移指南(二)程式碼替換 Eureka

自 Spring Cloud 官方宣佈 Spring Cloud Netflix

Spring Cloud Alibaba遷移指南(二)零代碼替換 Eureka

關於 lis maven lee work 啟動 默認 hystrix alibaba 自 Spring Cloud 官方宣布 Spring Cloud Netflix 進入維護狀態後,我們開始制作《Spring Cloud Alibaba遷移指南》系列文章,向開發者提供更

Spring Cloud Alibaba遷移指南(三)極簡的 Config

自 Spring Cloud 官方宣佈 Spring Cloud Netflix

Spring Cloud Alibaba基礎教程使用Nacos實現服務註冊與發現

什麽 docs -c 構建 .project per releases 會有 gist 自Spring Cloud Alibaba發布第一個Release以來,就備受國內開發者的高度關註。雖然Spring Cloud Alibaba還沒能納入Spring Cloud的主版本

Spring Cloud Alibaba基礎教程支持的幾種服務消費方式(RestTemplate、WebClient、Feign)

功能 code vat learn master public http stp spa 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的註冊與發現,同時也介紹如何通過LoadB

Spring Cloud Alibaba基礎教程Nacos配置的加載規則詳解

方案 用戶 per 回顧 應用名 增加 我們 pla 基礎 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式(RestTemplate、WebCl

Spring Cloud Alibaba基礎教程Nacos配置的多文件加載與共享配置

space info master 分享 fresh 覆蓋 aid hle 過程 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》 《Sprin

Spring Cloud Alibaba基礎教程Sentinel使用Nacos存儲規則

cati esc lis 調用 tor 選項 選擇 XML 參考 通過上一篇《使用Sentinel實現接口限流》的介紹,相信大家對Sentinel已經有了初步的認識。在Spring Cloud Alibaba的整合封裝之下,接口限流這件事情可以非常輕易的整合到我們的Spri

Spring Cloud Alibaba基礎教程Sentinel使用Apollo存儲規則

進行 詳細介紹 serve 相關 handle tor 集群模式 詳細 keep 上一篇我們介紹了如何通過Nacos的配置功能來存儲限流規則。Apollo是國內用戶非常多的配置中心,所以,今天我們繼續說說Spring Cloud Alibaba Sentinel中如何將流控

Spring Cloud Alibaba基礎教程支持的幾種服務消費方式

端口 turn ppi body 關於 dep vat lan autowired 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的註冊與發現,同時也介紹如何通過LoadBala

Spring Cloud Alibaba基礎教程Sentinel Dashboard同步Apollo儲存規則

在之前的兩篇教程中我們分別介紹瞭如何將Sentinel的限流規則儲存到Nacos和Apollo中。同時,在文末的思考中,我都指出了這兩套整合方案都存在一個不足之處:不論採用什麼配置中心,限流規則都只能通過Nacos介面或Apollo介面來完成修改才能得到持久化儲存,而在Sentinel Dashboard中修

Spring Cloud Alibaba基礎教程Sentinel Dashboard中修改規則同步到Nacos

上一篇我們介紹瞭如何通過改造Sentinel Dashboard來實現修改規則之後自動同步到Apollo。下面通過這篇,詳細介紹當使用Nacos作為配置中心之後,如何實現Sentinel Dashboard中修改規則同步到Nacos。關於下面改造的原理和分析可以見上一篇《Sentinel Dashboard中

Spring Cloud Alibaba | Sentinel分散式系統的流量防衛兵基礎實戰

Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 1. Sentinel控制檯概述 在介紹入門實戰之前,先來介紹一下Sentinel。Sentinel

Spring Cloud Alibaba | Sentinel分散式系統的流量防衛兵進階實戰

Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵進階實戰 在閱讀本文前,建議先閱讀《Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰》。 1. Sentinel整合Feign和RestTemplate Sentinel目前已經

Spring Cloud Alibaba | Sentinel分散式系統的流量防衛兵動態限流規則

Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵動態限流規則 前面幾篇文章較為詳細的介紹了Sentinel的使用姿勢,還沒看過的小夥伴可以訪問以下連結檢視: 《Spring Cloud Alibaba | Sentinel:分散式系統的流量防衛兵基礎實戰》 《Sprin

Spring Cloud Alibaba基礎教程Nacos服務發現與配置管理

隨著微服務概念的流行,越來越多的公司採用Spring Cloud全家桶構建微服務系統,實現業務的快速迭代。Spring Cloud提供了快速構建分散式微服務常用元件,包括Spring Cloud Eureka、Spring Cloud Ribbon、Spring Cloud Hystrix、Spring Cl

Spring Cloud Alibaba生態探索Dubbo、Nacos及Sentinel的完美結合

@[toc] ## 背景 - 在上篇文章[《Spring Cloud Alibaba微服務生態的基礎實踐》](https://www.cnblogs.com/zhuhuix/p/13679153.html)中,我們初步瞭解了`Spring Cloud Alibaba`微服務生態體系,並動手實踐了`Nacos`

Spring Cloud構建微服務架構服務消費(基礎)

消費 ring str frame emp default class a template pom.xml 使用LoadBalancerClient在Spring Cloud Commons中提供了大量的與服務治理相關的抽象接口,包括DiscoveryClient、這裏我