开发者学堂课程【精通 Spring Cloud Alibaba:sentinel 控制台控制客户端配置】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/634/detail/10156
sentinel 控制台控制客户端配置
目录:
一、秒杀项目怎么连接到控制台
二、抛出异常
一、秒杀项目怎么连接到控制台
Sentinel:
Transport:
Dashboard:127.0.0.1:8718
(地址8718)
Eager:true
将以上内容运行到秒杀服务,项目就可以整合到控制台了。
就会出现 meitemayikt-order 这样就整合成功了。
优化代码:
@requestmapping(
“/seckill”)
Public string secking(long userid, long orderid) {
Return
”秒杀成功”(对接口的限流实现了完全动态)
运行起来:
现在没有配备秒杀规则,所以可以无限访问,把秒杀规则给它配置好,找到热点规则,这个地方会有一个8719的这个端号(8718属于界面端口号 8719属于 api 通讯的端口号)
所以在这边我们可以配置一个规则,在这还是需要一个注解,叫做 sentinelresources 的注解,然后这个注解会写入你的资源名称:@sentinelresources(value =SEKILL_RULE),运行。
在控制台中的热点规则里设置热点参数流规则
资源名:seckill
限流模式:QPS 模式
参数索引:0
单机阈值:1 统计窗口时长:1
是否集群:否
现在会把规则刷新到秒杀服务中
这时候秒杀服务如果重启的话,那么这个规则就会消失。
这时就可以把规则持久化到这个 nacos 里面,秒杀服务项目启动的时候,连接 nacos 里面拿到新规则。
Sentinel 控制台只会读取秒杀内存,这样就能保持数据一致重启后还在。
二、抛出异常
新建:
资源名:seckill
限流模式:QPS 模式
参数索引:0
单机阈值:1 统计窗口时长:1
是否集群:否
运行;秒杀失败会抛出异常
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as afallback.
Mon Feb 17 21:46:02 CST 2020
There was an unexpected error (type=Internal Server Error, status=500).
No message available
如果被限流就会抛出异常。一般限流的情况下会走 blockhandler 的方法。走服务器会走 fallback 方法。
将代码改成这样也不会成功:
public String blockHandlerFallback (Long userId, Long orderId)
Return "当前该用户访问频率过多,请稍后重试!";
此时新建热词规则:
资源名:seckill
限流模式:QPS模式
参数索引:0
单机阈值:1 统计窗口时长:1
是否集群:否
还是会抛出异常:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as afallback.
Mon Feb 17 21:46:02 CST 2020
There was an unexpected error (type=Internal Server Error, status=500).
No message available
方法的参数列表与原函数一定要保持一致。包括访问类型也需要保持一致。
限流会抛出异常,那么想要改变一行提醒,怎么做?
我们可以专门去捕获异常 paramflowexception,只要是这样绝对是热词限流。这时候写一个全局的捕获异常
@RestControllerAdvice
public class InterfaceExceptionHandler{
@ResponseBody
@ExceptionHandler(ParamFlowException.class)
Public String business Interface Exception (ParamFlowExceptione)
return
"您当前访问的频率过高,请稍后重试!";
重启即可解决问题。
将时间单机阈值改长,改为10,说明一秒钟可以走10个