SpringCloud Alibaba全集文章目录:
零、手把手教你搭建SpringCloudAlibaba项目
一、手把手教你搭建SpringCloud Alibaba之生产者与消费者
二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心
三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心
四、手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置
五、手把手教你搭建SpringCloudAlibaba之Nacos服务持久化配置
六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量实时监控
七、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量控制
八、手把手教你搭建SpringCloudAlibaba之Sentinel服务熔断降级
九、手把手教你搭建SpringCloudAlibaba之Sentinel热点key限流
十、手把手教你搭建SpringCloudAlibaba之Sentinel系统自适应保护
十一、手把手教你搭建SpringCloudAlibaba之Sentinel注解SentinelResource
十二、手把手教你搭建SpringCloudAlibaba之Sentinel规则持久化
十三、手把手教你搭建SpringCloudAlibaba之Seata分布式事务
点击跳转学习 -------------->手把手教你搭建SpringCloud项目
1、为什么要持久化?
在前边的文章中我们各个规则的配置,是先有服务的调用,随后我们才能进行服务限流的配置,当我们重启服务,sentinel之前配置规则就没有了,原因就是数据全部保存在内存之中,我们还需要重新配置,在平时的项目的开发过程中,服务是会经常性的重启,在生成环境当中更是不允许这样的事情发生。所以就需要将我们的配置的规则进行是持久化操作!
2、为什么使用Nacos?
如果要想实现配置规则的读写操作,那么必然要有一个存储的终端,而且这个终端需要保证性能高,同时又可以很稳定,这样一来几乎就不会去考虑到 SQL 数据库了(配置的限流规则一般很少去改变,更多的是进行配置规则的读取),还有就是如果说现在你要开发一个系统,这个系统可以由管理人员在服务应用部署上线之前,就可以进行所有限流规则的维护,这个时候一定完善的管理界面(排除那些没有完善管理界面:Redis、Zooeeper),所以最佳的做法就是使用 Nacos,因为 Nacos 里面支持有一个完善的处理界面,而且其本身是提供有JSON 数据(各种的数据类型都是支持的)的直接存储,最重要的是 Nacos还是SpringCloudAlibaba 套件之中最为重要的注册中心。
3、如何进行配置?
Sentinel 为了便于资源限流规则的持久化管理,专门提供了 ReadableDataSource(配置读取)与 WritableDataSource(置写入接口)两个操作接口,利用这两个接口可以向指定的存储设备中实现规则的读写处理。Sentinel提供的DataSource是一个逻辑上的概念,具体的存储可以是关系型数据库文件、ZooKeeper、Redis、Nacos等存储终端,在终端中可以保存所需要的限流规则而对于DataSource的操作形式也提供有两种: 1、拉模式(Pull-Based): 客户端主动向某个DataSource存储中心定期轮询并读取规则,这个配置中心可能是一个文件,或者是关系型数据库,虽然此种方式简单,但是却无法及时获取到配置更新, 2、推模式(Push-Based): 所有的限流规则由配置中心(Nacos、Zookeeper、Redis等) 统一推送客户端通过注册监听器的方式监听规则的变化,这样可以更好的保持配置的实时性和一致性。
如果考虑到配置的及时性的问题,那么推模式是首选的,推模式实现的过程之中最为重要的一点就是需要对限流规则进行监听 (Redis 监听、ZooKeeper 监听),但是 Nacos 本身就提供有了一个完善的监听支持。
在pom文件中加入所使用数据源的jar包
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
在yml配置文件中加入数据源的配置
#数据源的配置datasource:flow-datasource: #流控的数据源nacos: #当前存储的介质为Nacosserver-addr: localhost:8848 #nacos的地址data-id: cloudalibaba-sentinel-server #配置项的名称group-id: DEFAULT_GROUP #分组的id 一般为大写data-type: json #配置的文件的结构rule-type: flow #流控规则
配置完成后如图:
重新启动项目,在nacos中进行配置
Data ID 要与配置文件中的 data-id: cloudalibaba-sentinel-server #配置项的名称 所对应
GROUP 要与配置文件中的 group-id: DEFAULT_GROUP 所对应
配置格式 选择json 要与配置文件中的 data-type: json #配置的文件的结构 所对应
配置内容:
[
{
"resource": "/testA",
"limitApp": "default",
"grade":1,
"count": 2,
"strategy": 0,
"controlBehavior":0,
"clusterMode": false
}
]
参数解读:
配置完成之后,我们就可以看到我们刚刚的所配置的文件。
我们访问http://localhost:8401/testA 可以看到进行了限流。
看到sentinel的控制台的流控规则也有了我们刚刚配置的限流规则。
我们将nacos中的配置进行修改一下,将count改为5,进行保存。看看sentinel是否会变?
这里会有颜色提示我们修改的地方, 点击确认发布。
看到我们的sentinel中的配置也进行了改变。