Day3-微服务-Sentinel-具体使用

引入依赖sentinel:

html 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

在需要限流的实习类的方法上加入注解:

java 复制代码
  @SentinelResource(value = "doConfirm", blockHandler = "doConfirm")
    public void doConfirm(ConfirmOrderMQDto dto) 

要先初始化规则,由于我们设置了RocketMQ消息队列,所以要将限流规则放在确认订单前:

java 复制代码
 @SentinelResource(value = "confirmOrderDo", blockHandler = "doConfirmBlock")
    @PostMapping("/do")
    public Result<Object> doConfirm(@Valid @RequestBody ConfirmOrderDoReq req)

规定一个被限流后该走哪一步,否则会报错,参数和返回值要和规则的一致。

java 复制代码
    public Result<Object> doConfirmBlock(ConfirmOrderDoReq req, BlockException e) {
        LOG.info("ConfirmOrderController购票请求被限流:{}", req);
        // throw new BusinessException(BusinessExceptionEnum.CONFIRM_ORDER_FLOW_EXCEPTION);
        Result<Object> commonResp = new Result<>();
        commonResp.setSuccess(false);
        commonResp.setMessage(BusinessExceptionEnum.CONFIRM_ORDER_FLOW_EXCEPTION.getDesc());
        return commonResp;

    }

控制台:

XML 复制代码
#sentinel控制台
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=localhost:18719

laocalhost要跟控制台打开的端口保持一致

在idea中打开下载好的sentinel的jar包,点击运行启动类。

账户和密码都是sentinel。

打开实时监控并重新发送线程,可以看到响应时间:

将阈值修改后,每秒只能一个请求变为10个请求都通过。

通过控制台改变规则

可以在控制台或者IDE上配置流控规则,控制台不保存规则,重启就没有了。直接推送到客户端。

可以通过触点链路增加规则。

现在把doConfirm的value改成接口名,在控制台增加规则:

java 复制代码
@SentinelResource(value = "/confirm-order/do", blockHandler = "doConfirmBlock")
    @PostMapping("/do")
    public Result<Object> doConfirm(@Valid @RequestBody ConfirmOrderDoReq req) 

对接口有两种拦截,一种是进去了,一种是没进去。

复制代码
接口的资源名称不要和接口路径一致,会导致限流后走不到降级方法中,不加资源返回的就是一堆字符串。

成功走到降价方法中。

限流规则的持久化:

html 复制代码
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

在nacos控制台中点击train命名空间,增加一个配置:

选择json:

html 复制代码
[
    {
        "resources":"doConfirm",
        "limitApp":"default",
        "grade":1,
        "count":100,  #阈值
        "strategy":0,  #流控模式
        "controlBehavior":0, #流控效果
        "clusterMode":false #是否集群
    },{
        "resources":"confirmOrderDo",
        "limitApp":"default",
        "grade":1,
        "count":100,
        "strategy":4,
        "controlBehavior":0,
        "clusterMode":false
    }
]

降级方法:

流控模式:

warm up:适合有大量请求的情况。

排队等待:

对目标的限流是有条件的,需要关联的资源限流时,目标才会限流。

,且两个接口是实时的

关联&链路:

熔断策略:

慢调用比例,异常比例,异常数

比例阈值0.3,最大RT,熔断时长,在统计时长内,10个有超过三个的请求超过最大RT就会熔断。在超过熔断时长后就又会重新

最大RT

有降级在熔断后就可以继续往下处理,17章倒数第二个视频

相关推荐
code2cat7 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe7 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码7 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling7 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用7 小时前
Java Web 7-10
java·servlet
蜗牛互联网9 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff10 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays101110 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找
geats人山人海10 小时前
java 4继承
java·开发语言