目录:
(1)授权规则
(2)自定义异常
(3)规则的持久化-规则管理模式
(4)实现push模式
(1)授权规则
我们已经学习了实时监控、簇点链路、流控规则、降级规则、热点规则,但是系统规则是对当前系统所在的服务器的一种保护,不过这种保护规则只对Linux有效,授权规则是对请求者身份的判断,而集群流控呢是把限流的规则放到集群的场景下去做判断,不在针对单个机器,目前还出于准备阶段
我们只演示授权规则
网关可以做请求身份的验证,但是有可能把微服务的地址泄露出去,这样被人可以直接绕过网关访问微服务了,网关做的再严密也没有用了,微服务赤裸裸的暴露给别人,Sentinel授权规则可以解决这个问题,因为他可以去验证这个请求是从哪里来的,如果说是从网关过来的,让通过,是从浏览器过来的,进行拦截,授权配置只有两种:白名单、黑名单
请求来源解析器,里面的方法解析的结果默认都是default ,需要我们自己去实现这个接口重写这个方法,去区分网关和浏览器过来的请求,返回不同的结果,这样来源的名称就不一样了,重写方法获取请求头,从网关和浏览器的请求头不一样,就可以写请求名称了,但是网关和浏览器默认没有这个头,是我自己写的,我们可以给网关加这个头,这个头就有了,就区分开了,可以给网关加这个请求头,我们在学习网关的时候,学习的网关过滤器叫AddRequestHeader,这个过滤器凡是通过网关路由到微服务的请求,都会带上配置的请求头
而从浏览器来的请求不一定带这个请求头了,这样就区分来了
创建这个类实现接口:
在网关里添加过滤器:
重启服务:
访问一下:
给/order/{orderId}添加授权规则,点击授权按钮:
测试:
直接在浏览器发送请求,不允许访问
通过网关10010访问:正常访问,网关做了权限校验,访问的时候加上,authorization=admin
这样授权规则就已经生效了,授权规则,就是对请求来源的判断,通过配置来源名称,来去判断是否允许你访问,来源名称需要我们自定义RequestOriginParser来解析来源名称
(2)自定义异常
当通过浏览器访问,返回一个限流的异常,明明是授权拦截,返回的是限流异常,用户就不知道什么问题了,事实上限流也好,降级也好,各种异常,最终返回的都是限流,对用户不够友好,不够清除,因此我们需要学习自定义异常
创建这个类:
重启:
添加流控按钮:添加
删除规则重新添加:点击授权按钮
浏览器访问:
(3)规则的持久化-规则管理模式
每当我们的服务重启,我们所配置的规则它就丢失了,这是因为Sentinel默认会把这些规则保存在内存里面,重启自然就丢失了,在生产环境下,不能容忍这样的问题,所以需要学习将Sentinel的规则进行持久化
(4)实现push模式
在pom文件中引入:
在nacos做配置管理的时候,dataId和groupId每个配置文件都要有 ,这是确定配置文件名称的标识,rule-type:具体的规则类型 degard:降级 authority:授权 param-flow:热点参数限流
还可以做降级配置,这里先演示限流
重新打包好了一个
重新启动更改好的Sentinel:这里可以覆盖nacos的地址,如果不更该可以不加-Dnacos.addr...
访问一下nacos:
Sentinel:控制台
会多出一个流控规则nacos
在这里添加的流控规则,会进入nacos
新增一个流控规则:
注意要点击左侧的流控规则在这个页面进行添加,不能再在簇点链路页面添加,因为在这个页面添加它走得是原始的
刷新一下nacos页面:会多出一个流控规则
测试:访问一下,限流了
重启微服务:以前重启微服务,做的限流规则就丢失了
刷新页面:流控规则不会丢失,依然还在
在次访问,还会触发流控规则: