隨着微服務的流行,服務和服務之間的穩定性變得愈來愈重要。Sentinel 以流量爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。html
Sentinel 具備如下特徵:java
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
HTTP 埋點
Sentinel starter 默認爲全部的 HTTP 服務提供了限流埋點,若是隻想對 HTTP 服務進行限流,那麼只須要引入依賴,無需修改代碼。git
自定義埋點
若是須要對某個特定的方法進行限流或降級,能夠經過 @SentinelResource
註解來完成限流的埋點,示例代碼以下:github
@SentinelResource("resource") public String hello() { return "Hello"; }
首先須要獲取 Sentinel 控制檯,支持直接下載和源碼構建兩種方式。spring
1.1 直接下載:下載 Sentinel 控制檯
1.2 源碼構建:進入 Sentinel Github 項目頁面,將代碼 git clone 到本地自行編譯打包,參考此文檔。編程
啓動控制檯,執行 Java 命令 java -jar sentinel-dashboard.jar
完成 Sentinel 控制檯的啓動。 控制檯默認的監聽端口爲 8080。Sentinel 控制檯使用 Spring Boot 編程模型開發,若是須要指定其餘端口,請使用 Spring Boot 容器配置的標準方式,詳情請參考 Spring Boot 文檔。app
spring.cloud.sentinel.transport.port=8719 spring.cloud.sentinel.transport.dashboard= localhost:8080
2.啓動應用,並調用服務,任意的controller暴露的http服務框架
訪問 http://localhost:8080 頁面,能夠在左側看到 naco-consumer 應用已經註冊到了控制檯,單擊 流控規則 ,能夠看到目前的流控規則爲空。ide
配置 URL 限流規則:點擊新增流控規則,資源名填寫須要限流的 URL 相對路徑,單機閾值選擇須要限流的閾值,點擊新增進行確認。(爲了便於演示效果,這裏將值設置成了 1)。spring-boot
訪問 URL,當 QPS 超過 1 時,能夠看到限流效果以下。
Sentinel 適配了 Feign 組件。若是想使用,除了引入 sentinel-starter
的依賴外還須要 2 個步驟:
配置文件打開 sentinel 對 feign 的支持:feign.sentinel.enabled=true
加入 feign starter
依賴觸發 sentinel starter
的配置類生效:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
這是一個 FeignClient
的簡單使用示例:
@FeignClient(name = "nacos-config" ,fallback = ConfigFeignClientFallback.class, configuration = FeignConfiguration.class) public interface ConfigFeignClient { @RequestMapping(value = "/config/get", method = RequestMethod.GET) String userKey(); } class FeignConfiguration { @Bean public ConfigFeignClientFallback configFeignClientFallback() { return new ConfigFeignClientFallback(); } } class ConfigFeignClientFallback implements ConfigFeignClient { @Override public String userKey() { return "echo fallback"; } }
1.咱們把服務提供方nacos-config應用中止運行。
因爲feign在訪問nacos-config時發生異常,觸發降級條件,因而結果以下:
從新啓動nacos-config服務,訪問變回正常:
請參考官方文檔: