前面不管是通过Java代码还是通过Sentinel控制台的方式去设置限流规则,都属于手动方式,不够灵活。这种方式一般仅用于测试和演示,生产环境上一般通过动态规则源的方式来动态管理限流规则。也就是说,很多时候限流规则会被存储在文件、数据库或者配置中心当中。Sentinel的 DataSource 接口给我们提供了对接任意配置源的能力。
官方推荐通过控制台设置规则后将规则推送到统一的规则管理中心,客户端实现 ReadableDataSource 接口端监听规则中心实时获取变更,流程如下:
常见的实现方式有:
拉取式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则管理中心可以是文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;实现拉模式的数据源最简单的方式是继承AutoRefreshData