概念
怎么开局就是大八股 一堆概念
适配多种微服务架构
对需要掌控的资源定义规则,把规则存到注册中心里面
控制台
先下载dashboard yml配置开启
自定义sentinelResource,簇点链路
天哪这就是同步学习的感觉吗
图中,create接口是自动探测的资源,createOrder是注解自定义的资源,GET是远程调用
(如果没有定义就会变成如下)
自定义流(量)控(制)规则 qps=1 每秒单机只能接受一个请求
这个流控是存在内存的,服务重启就失效
执行效果:
注意这个图(重点)先说异常处理
先看web接口
对应前面的那个异常 用的就是SentinelWebInterceptor
可以看一下AbstractSentinelInterceptor
ctrl+n搜索类 ctrl+h查看类的结构 自己点进去看Exception和SentinelWebInterceptor吧
对应前面提到的几种规则
违背对应规则,就抛出异常,对应有处理方式
调用SphU进入资源保护流程
没有违反,返回true,否则抛出BlockException,处理的时候用DefaultBlockExceptionHandler
自定义返回信息 获取打印异常的class
第二类 sentinel resource 异常 返回默认页
查看SentinelResourceAspect
AOP环绕通知
pointcut是这个注解
异常处理其实是看注解上有没有标注blockHandler 没有的话看fallback 也没有的话直接抛出去 异常没人管了
因为一般项目会有全局异常处理器 所以就用这个处理异常就好
搜一篇文章结果发现收藏过的救赎感
关于controllerAdvice注解 感觉就是用于全局的一些
全局异常处理器实现
- 定义一个baseException
- 定义其他Exception继承这个
最后没有用全局异常处理器是加了handler 定义一个方法
openfeign远程调用
如果有定义fallback就可以返回 否则跟上面一样抛出异常
动态代理 invoke
也是用SphU.entry对资源进行控制
所以也可以自己用SphU硬编码
更多的参考这个吧 sentinel官方文档
流控规则
QPS和并发线程数的效果差不多,不过qps计算是用计数器,比较轻量级,并发线程是统计线程池的线程数量
如果勾选集群模式
单机均摊:就是每一个个体的阈值都为1;总体阈值:所有的加起来的阈值为1
编辑流控规则 默认就是直接和快速失败
链路就是:比如限制创建订单的资源,但是只针对秒杀的链路进行限制。两条链路如下:
设置入口资源
关联策略:优先写,限流读。就是仅仅在写的请求量大的时候才限流读请求
需要在readDb那里设置规则 关联 关联资源/writeDb
(我就不写了)