Sentinel 不僅僅可以可以作用于服務之間,還可以完美的和服務網關 GateWay 或者 Zuul 一起使用來對網關實現流控。從 1.6.0 版本開始,Sentinel 提供了 Spring Cloud Gateway 的適配模塊,可以提供兩種資源維度的限流:
route 維度:即在 Spring 配置文件中配置的路由條目,資源名為對應的 routeId。
自定義 API 維度:用戶可以利用 Sentinel 提供的 API 來自定義一些 API 分組。
引入依賴
使用時需引入以下模塊(以 Maven 為例):
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
- </dependency>
YML 配置
需要配置 sentinel 的控制臺地址,用來同步規則配置信息;還有就是需要配置 Nacos 來獲取服務列表;還有就是配置服務網關的路由信息。
- server:
- port: 2001
- spring:
- application:
- name: gateway-service
- profiles:
- active: dev
- cloud:
- # 注冊中心
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848
- # 流控配置
- sentinel:
- transport:
- port: 8719
- dashboard: localhost:8080
- # 降級策略
- scg:
- fallback:
- mode: response
- response-status: 426
- response-body: error request
- # 網關配置
- gateway:
- routes:
- - id: stock_route
- uri: lb://stock-service
- predicates:
- - Path=/stock/**
啟動網關
在 API Gateway 端,用戶只需要在原有啟動參數的基礎上添加如下啟動參數即可標記應用為 API Gateway 類型:
- -Dcsp.sentinel.app.type=1
配置流控規則
我們可以在 Sentinel 的管理后臺對我們之前添加的 stock_route 增加流控規則配置
總結
我們通過Sentinel 和 Gateway 的整合,我們可以輕松的設置一個服務集群,或者多個服務的訪問入口流量控制。
此處只是簡單的實現了錯誤信息的返回,對于自定義異常信息的處理,以及更多的生產復雜情況,我們更多的是和結合 Sentinel 本身提供的一些功能來響應實際問題,以及結合設計者的設計思想,我們可以通過修改源碼或者在拓展點進行拓展來讓 Sentinel 更好的服務于我們的生產。
參考
https://github.com/alibaba/Sentinel/wiki
原文鏈接:https://mp.weixin.qq.com/s/9CvlOjxGnSqfD4_dLjK0SA