詳解Sentinel 結(jié)合 GateWay 限流
Sentinel 不僅僅可以可以作用于服務(wù)之間,還可以完美的和服務(wù)網(wǎng)關(guān) GateWay 或者 Zuul 一起使用來對網(wǎng)關(guān)實現(xiàn)流控。從 1.6.0 版本開始,Sentinel 提供了 Spring Cloud Gateway 的適配模塊,可以提供兩種資源維度的限流:
route 維度:即在 Spring 配置文件中配置的路由條目,資源名為對應(yīng)的 routeId。
自定義 API 維度:用戶可以利用 Sentinel 提供的 API 來自定義一些 API 分組。
引入依賴
使用時需引入以下模塊(以 Maven 為例):
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
- </dependency>
YML 配置
需要配置 sentinel 的控制臺地址,用來同步規(guī)則配置信息;還有就是需要配置 Nacos 來獲取服務(wù)列表;還有就是配置服務(wù)網(wǎng)關(guān)的路由信息。
- 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
- # 網(wǎng)關(guān)配置
- gateway:
- routes:
- - id: stock_route
- uri: lb://stock-service
- predicates:
- - Path=/stock/**
啟動網(wǎng)關(guān)
在 API Gateway 端,用戶只需要在原有啟動參數(shù)的基礎(chǔ)上添加如下啟動參數(shù)即可標記應(yīng)用為 API Gateway 類型:
- -Dcsp.sentinel.app.type=1
配置流控規(guī)則
我們可以在 Sentinel 的管理后臺對我們之前添加的 stock_route 增加流控規(guī)則配置
總結(jié)
我們通過Sentinel 和 Gateway 的整合,我們可以輕松的設(shè)置一個服務(wù)集群,或者多個服務(wù)的訪問入口流量控制。
此處只是簡單的實現(xiàn)了錯誤信息的返回,對于自定義異常信息的處理,以及更多的生產(chǎn)復(fù)雜情況,我們更多的是和結(jié)合 Sentinel 本身提供的一些功能來響應(yīng)實際問題,以及結(jié)合設(shè)計者的設(shè)計思想,我們可以通過修改源碼或者在拓展點進行拓展來讓 Sentinel 更好的服務(wù)于我們的生產(chǎn)。
參考
https://github.com/alibaba/Sentinel/wiki