微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
微服务保护
文章目录
- 微服务框架
- 微服务保护
- 34 规则持久化
- 34.2 实现push 模式
- 34.2.1 规则管理模式 - 实现push 模式
34 规则持久化
34.2 实现push 模式
34.2.1 规则管理模式 - 实现push 模式
push模式实现最为复杂,依赖于nacos,并且需要改在Sentinel控制台。整体步骤如下:
-
修改order-service服务,使其监听Nacos配置中心
-
修改Sentinel-dashboard源码,配置nacos数据源
-
修改Sentinel-dashboard源码,修改前端页面
-
重新编译、打包-dashboard源码
【黑马老师给的课前资料】
步骤一:修改order-service服务,使其监听Nacos配置中心
具体步骤如下:
- 引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
记得刷一下
- 配置nacos地址
修改yaml 配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 200039
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
cloud:
inetutils:
timeout-seconds: 10
nacos:
server-addr: localhost:8848 # nacos服务地址
sentinel:
transport:
dashboard: localhost:8080
web-context-unify: false # 关闭context 整合
datasource:
flow:
nacos:
server-addr: localhost:8848 # nacos地址
dataId: orderservice-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow # 还可以是:degrade、authority、param-flow
OK,重启order 服务
OK
步骤二:修改sentinel-dashboard源码,添加nacos数据源
SentinelDashboard默认不支持nacos的持久化,需要修改源码。
【黑马老师直接跳过了修改步骤,因为太麻烦了,他直接给了一个改好的】
笔者这里还是把改源码的步骤简单贴一下
① 解压
然后用IDEA打开这个项目,结构如下:
② 修改nacos 依赖
在sentinel-dashboard源码的pom文件中,nacos的依赖默认的scope是test,只能在测试时使用,这里要去除:
将sentinel-datasource-nacos依赖的scope去掉:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
③ 添加nacos 支持
在sentinel-dashboard的test包下,已经编写了对nacos的支持,我们需要将其拷贝到main下。
④ 修改nacos 地址
然后,还需要修改测试代码中的NacosConfig类:
修改其中的nacos地址,让其读取application.properties中的配置:
在sentinel-dashboard的application.properties中添加nacos地址配置:
nacos.addr=localhost:8848
⑤ 配置nacos 数据源
另外,还需要修改com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类:
让添加的Nacos数据源生效:
【修改前端页面】
接下来,还要修改前端页面,添加一个支持nacos的菜单。
修改src/main/webapp/resources/app/scripts/directives/sidebar/目录下的sidebar.html文件:
将其中的这部分注释打开:
修改其中的文本:
⑦ 重新编译、打包项目
运行IDEA中的maven插件,编译和打包修改好的Sentinel-Dashboard:
⑧ 启动
启动方式跟官方一样:
java -jar sentinel-dashboard.jar
如果要修改nacos地址,需要添加参数:
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar
OK,这里笔者也就直接用老师做好的jar 包了
先把之前用的官方 sentinel 停掉
拷贝一下老师做好的jar 包
OK,直接一样的命令运行它【笔者这里本来就是本地的 8848 nacos ,就不用修改了】
OK, 这样就跑起来了
先看看nacos 的控制台
账户密码都是nacos
OK,这就进来了
访问sentinel 控制台
访问个接口,“激活” 链路
OK, 再次查看sentinel 控制台
清空一下缓存
OK, 这样左边导航栏 就多出了一个“流控规则 - NACOS ” 条目
这下在这里面添加的流控规则最终就会进入 nacos
OK,直接试试,新增一个流控规则
直接新增
OK,看看Nacos 的控制台
妙啊,现在再次访问测试
连点两次,【配置的QPS = 1】
OK, 限流成功,现在重启order 微服务
如果是以前,那限流规则就没了,但是现在我们直接再去测试【还是需要先"激活一下"链路】
OK, 之前的规则并没有丢失
测试
连刷两次,流控成功【牛逼!!!!!!】