微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HM-SpringCloud微服务系列8.5【规则持久化】

现在,sentinel的所有规则都是内存存储,重启后所有规则都会丢失。在生产环境下,我们必须确保这些规则的持久化,避免丢失。

1. 规则管理模式

规则是否能持久化,取决于规则管理模式,sentinel支持三种规则管理模式:

image

1.1 原始模式(认)

原始模式:控制台配置的规则直接推送到Sentinel客户端,也就是我们的应用。然后保存在内存中,服务重启则丢失。

image

1.2 pull模式

pull模式:控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件数据库中。以后会定时去本地文件数据库查询,更新本地规则。

image

1.3 push模式(推荐)

push模式:控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听Nacos,获取配置变更的推送消息,完成本地配置更新。

image

1.4 小结

image

2. 实现push模式

image

2.1 步骤1

image


修改OrderService,让其监听Nacos中的sentinel规则配置。
在order-service中引入sentinel监听nacos的依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

在order-service中的application.yml文件配置nacos地址及监听的配置信息:

spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow

image


image


重启order服务

例如以后需要在限流配置上+降级配置,可以如下配置(复制一份换名即可)

image

2.2 步骤2

image

2.3 步骤3

image


image

2.4 步骤4

image


image

PS:步骤2&3&4较为繁琐,在此不做演示,只用课程资料中老师修改完打包好的直接运行查看效果

image


先停掉之前开启的正常未修改的sentinel服务

image


启动方式跟官方一样:通过命令java -jar sentinel-dashboard.jar
注意:如果要修改nacos地址,需要添加参数:-D

nacos地址须与order服务中配置的一致,如果待开启包内原先配置的不是,则可以通过+命令-Dnacos.addr=localhost:8848进行修改
此处实际加不加都行,因为包内老师改的就是8848,以下命令仅做演示

image


浏览器访问nacos控制台

image


image


image


访问sentinel控制台发现的啥也木有

image


访问http://localhost:8088/order/101触发簇点链路

image


image


F12打开调试模式清空当前页面缓存

image


image


在此页面添加的流控规则会被持久化保存到nacos


测试一下吧

image


image


image


image


此时访问http://localhost:8088/order/101,发现已被限流

image

现在重启order服务,再次访问发现规则还在,还是被限流ok(此前没有持久化保存时,重启服务后会丢失规则,即限流失效)

image


image


image

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐