网上购物商城源代码,做网站程序的都不关注seo,建设一个做资料库的网站,财务公司简介项目git地址#xff1a;https://gitee.com/lpengs/cloud-demo.git
前面我们学习sentinel熔断和降级时#xff0c;如果服务器重启#xff0c;那么配置的规则都会消失。这就很不友好。这里我们尝试把规则持久化到nacos中。
我们先看看没有把sentinel集成到nacos中是什么样子…项目git地址https://gitee.com/lpengs/cloud-demo.git
前面我们学习sentinel熔断和降级时如果服务器重启那么配置的规则都会消失。这就很不友好。这里我们尝试把规则持久化到nacos中。
我们先看看没有把sentinel集成到nacos中是什么样子的。
我们先修改下service-order里面的yml配置如下 server:port: 8000
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/order_tbl?useUnicodetruecharacterEncodingutf-8useSSLfalseusername: xxxxpassword: yyyyprofiles:active: devinclude: feignapplication:name: service-ordercloud:nacos:discovery:namespace: ${spring.profiles.active:dev}server-addr: 127.0.0.1:8848config:import-check:enabled: falsenamespace: ${spring.profiles.active:dev}
logging:level:com.atguigu.order.feign: debug
---
spring:config:import:- nacos:common.properties?grouporder- nacos:database.properties?grouporderactivate:on-profile: dev
---
spring:config:import:- nacos:common.properties?grouporder- nacos:database.properties?grouporderactivate:on-profile: test
---
spring:config:import:- nacos:common.properties?grouporder- nacos:database.properties?grouporderactivate:on-profile: prod
mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xmlconfiguration:map-underscore-to-camel-case: true # 驼峰映射建议开启 我们启动微服务。在此之前先启动nacos和sentinel
http://localhost:8848/nacos 用户名和密码都是nacos
http://localhost:8080/ 用户名和密码都是sentinel 页面输入 http://localhost:8000/readDb 回车
然后频繁刷新页面可以看到每次都可以获取到数据 然后我们在sentinel后台页面可以看到调用的这个接口信息看不到就刷新下 我们对这个接口进行下流控配置 点击流控
弹出的页面选择QPS 单击阈值改为1。代表最多1次/秒的访问频率限制。点击新增
这样就生效了。
这时可以在流控规则里面看到这个规则 接下来我们刷新页面频繁的话超过1QPS就会报错。如下 说明被限流了。 但是当我们重启下微服务再次频繁刷新时就会发现没有报错说明规则失效了。 这时候我们去后台sentinel看先刷新下流控规则已经消失了。 这是因为流控规则是保存在内存中的如果重启微服务内存中的规则就消失了。这是个不可接受的痛点哪能每次重启服务把规则重新配置一遍呢。所以把规则配置到nacos里面去。
我们首先在services里面引入依赖这样order微服务作为子项目也会自动引入这个依赖了
dependency groupIdcom.alibaba.csp/groupId artifactIdsentinel-datasource-nacos/artifactId version1.8.8/version
/dependency 记得右上角刷新下使依赖引入生效。
然后我们修改下yml配置如下 spring:cloud:openfeign:client:config:default:logger-level: fullconnect-timeout: 3000read-timeout: 5000service-product:logger-level: fullconnect-timeout: 3000read-timeout: 5000sentinel:transport:dashboard: localhost:8080eager: trueweb-context-unify: falsedatasource:flow:nacos:server-addr: 127.0.0.1:8848data-id: ${spring.application.name}-flow-rulesgroup-id: SENTINEL_GROUPrule-type: flowdata-type: jsonnamespace: ${spring.profiles.active:dev}
feign:sentinel:enabled: true大家记得命名空间是区分服务和properties配置的范围一定要一一对应比如dev、prod、test都要保持跟项目启动配置一致。
data-id是应用名字拼接上-flow-rules。
下面我们去nacos配置下这个data-id数据集 如上创建配置记得这是在dev下创建配置的跟yml中的命名空间需要一致。
service-order-flow-rules 注意这里是应用的名字拼接的根据自己的项目的实际名字来
SENTINEL_GROUP
order服务流控规则
[{resource: /readDb,limitApp: default,grade: 1, count: 1, clusterMode: false }
] 右下角发布即可。
然后我们重启服务刷新页面 可以看到频繁刷新的话被限流了。
下面重点看看我们重启微服务再次刷新操作看看还生效吗 如上图所示重启服务后规则还是生效的这样就做到了持久化。
授人以鱼不如授人以渔更多流控规则配置可以问问豆包小姐姐或者deepseek 真的超级好用的ai工具。推荐大家多利用。