SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储
前言
Sentinel 原生版本的规则管理通过API 将规则推送至客户端并直接更新到内存中,并不能直接用于生产环境。不过官方也提供了一种 Push模式,扩展读数据源ReadableDataSource,规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。这里我们通过配置 Nacos 来实现流控规则的统一存储配置。
架构
控制台推送规则至配置中心,客户端通过监听事件从配置中心获取流控规则。
客户端配置
pom.xml 引入:
com.alibaba.csp
sentinel-datasource-nacos
1.6.3
配置文件:
# nacos的访问地址,配置参考 https://blog.52itstyle.vip/archives/4174/
spring.cloud.sentinel.datasource.ds.nacos.server-addr=47.104.187.19:8848
#nacos中存储规则的dataId,对于dataId使用了${spring.application.name}变量,这样可以根据应用名来区分不同的规则配置
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-flow-rules
#nacos中存储规则的groupId
spring.cloud.sentinel.datasource.ds.nacos.groupId=SENTINEL_GROUP
#定义存储的规则类型
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow
控制台配置
修改 pom.xml,原来的test 去掉:
com.alibaba.csp
sentinel-datasource-nacos
把 src/test 下面的包 com.alibaba.csp.sentinel.dashboard.rule.nacos 拷贝到src/main/java 下面。
修改 NacosConfig:
/**
* @author Eric Zhao
* @since 1.4.0
*/
@Configuration
public class NacosConfig {
@Value("${nacos.address}")
private String address;
@Bean
public Converter
- , String> flowRuleEntityEncoder() {
return JSON::toJSONString;
}
@Bean
public Converter
- > ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher
- > rulePublisher;
修改sidebar.html页面, 流控规则路由从 dashboard.flowV1 改成 dashboard.flow
<-- nacos 动态规则配置-->