sentinel数据持久化mysql_12.05.sentinel规则持久化

## sentinel规则持久化

生产环境上,一般都是通过动态规则持久化的方式来动态的管理限流规则,也就是说,很多时候流控规则都会存储在文件,数据库或者配置中心当中,Sentinel的DataSource接口给我们提供了对接任意配置源的能力。所谓的动态规则就是通过控制台配置规则后持久化到各个数据源中。

![](https://img.kancloud.cn/cf/e8/cfe8227514224d3140b4e4b19cfa24c3_1130x584.png)

## sentinel的两个DataSource接口

* ReadableDataSource:读数据源负责监听持久化的数据源的变更,在接收到变更事件时将最新的数据更新

* WritableDataSource:写数据源负责将变更后的规则写入到持久化的数据源中

## sentinel-extension模块分析

在 1.7.1 版本,sentinel-extension 模块下的子模块除 sentinel-parameter-flow-control、sentinel-annotation-aspectj 之外,其余子模块都是实现动态数据源的模块。

* sentinel-datasource-extension:定义动态数据源接口、提供抽象类

* sentinel-datasource-redis:基于 Redis 实现的动态数据源

* sentinel-datasource-zookeeper: 基于 ZooKeeper 实现的动态数据源

* 其它省略

sentinel-datasource-extension 模块是 Sentinel 实现动态数据源的核心。

### SentinelProperty

SentinelProperty 是 Sentinel 提供的一个接口,可注册到 Sentinel 提供的各种规则的 Manager,例如 FlowRuleManager,并且可以给 SentinelProperty 添加监听器,在配置改变时,你可以调用 SentinelProperty#updateValue 方法,由它负责调用监听器去更新规则,而不需要调用 FlowRuleManager#loadRules 方法。同时,你也可以注册额外的监听器,在配置改变时做些别的事情。

SentinelProperty 并非 sentinel-datasource-extension 模块中定义的接口,而是 sentinel-core 定义的接口,其源码如下:

~~~

public interface SentinelProperty {

void addListener(PropertyListener listener);

void removeListener(PropertyListener listener);

boolean updateValue(T newValue);

}

~~~

* addListener:添加监听器

* removeListener:移除监听器

* updateValue:通知所有监听器配置更新,参数 newValue 为新的配置

默认使用的实现类是 DynamicSentinelProperty,其实现源码如下:

~~~

public class DynamicSentinelProperty implements SentinelProperty {

// 存储注册的监听器

protected Set> listeners = Collec

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值