Sentinel Dashboard中添加的規則是存儲在內存中的,我們的微服務或者Sentinel一重啟規則就丟失了,現在我們將Sentinel規則持久化配置到Nacos中,在Nacos中添加規則,然后同步到Sentinel Dashboard服務中。Sentinel 支持以下幾種規則:流量控制規則、熔斷降級規則、系統保護規則、來源訪問控制規則 和 熱點參數規則。具體可查看官網 Sentinel 規則
我們以流控規則為例進行配置,其他規則可自行配置測試。
流量規則的定義
重要屬性:
Field | 說明 | 默認值 |
---|---|---|
resource | 資源名,即規則的作用對象 | |
count | 限流閾值 | |
grade | 限流閾值類型,QPS 模式(1)或並發線程數模式(0) | QPS 模式 |
limitApp | 流控針對的調用來源 | default,代表不區分調用來源 |
strategy | 調用關系限流策略:直接、鏈路、關聯 | 根據資源本身(直接) |
controlBehavior | 流控效果(直接拒絕/WarmUp/勻速+排隊等待),不支持按調用關系限流 | 直接拒絕 |
clusterMode | 是否集群限流 | 否 |
1、gitegg-platform-cloud的pom.xml中引入sentinel-datasource-nacos依賴 |
<!-- Sentinel 使用Nacos配置 -->
<dependency>
<groupid>com.alibaba.csp</groupid>
<artifactid>sentinel-datasource-nacos</artifactid>
</dependency>
2、gitegg-platform-cloud的配置文件application.yml中添加數據源配置Nacos的路徑(這里面的配置,在實際應用過程中是配置在GitEgg-Cloud的Nacos配置中,會自動覆蓋這些配置)
spring:
cloud:
sentinel:
filter:
enabled: true
transport:
port: 8719
dashboard: 127.0.0.1:8086
eager: true
datasource:
ds2:
nacos:
data-type: json # 默認提供兩種內置的值,分別是 json 和 xml (不填默認是json)
server-addr: 127.0.0.1:8848
dataId: ${spring.application.name}-sentinel
groupId: DEFAULT_GROUP
rule-type: flow #rule-type 配置表示該數據源中的規則屬於哪種類型的規則(flow流控,degrade熔斷降級,authority,system系統保護, param-flow熱點參數限流, gw-flow, gw-api-group)
#Ribbon配置
ribbon:
#請求連接的超時時間
ConnectTimeout: 5000
#請求處理/響應的超時時間
ReadTimeout: 5000
#對所有操作請求都進行重試
OkToRetryOnAllOperations: true
#切換實例的重試次數
MaxAutoRetriesNextServer: 1
#當前實例的重試次數
MaxAutoRetries: 1
#Sentinel端點配置
management:
endpoints:
web:
exposure:
include: '*'
3、打開Nacos控制台,新增gitegg-service-system-sentinel配置項
[
{
"resource": "/system/sentinel/protected",
"count": 5,
"grade": 1,
"limitApp": "default",
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
4、打開Sentinel控制台管理界面,點擊流控規則菜單可以看到我們在Nacos中配置的限流信息,使用上一章節中使用的Jmater進行測試,可以看到限流生效。
本文源碼在https://gitee.com/wmz1930/GitEgg 的chapter-17分支。