当前位置: 首页 > news >正文

Sentinel学习

系列文章目录

JavaSE
基础知识、数据类型学习万年历项目代码逻辑训练习题
代码逻辑训练习题方法、数组学习图书管理系统项目
面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习
集合学习IO流、多线程学习仓库管理系统JavaSE项目
员工管理系统、多表查询、反射实现DBHelper学习DML、DDL、数据库对象学习
JavaWeb
网络编程、各种标签、CSS学习ECMAScript、BOM学习DOM、jQuery学习
Servlet、JSP、Cookie、Ajax学习融资管理系统JavaWeb项目
框架
MyBatis框架学习逆向工程、Spring框架IOC、AOP学习SpringMVC框架学习
SpringBoot框架学习招聘网站框架项目Vue介绍、窗体内操作、窗体间操作学习
Vue路由配置、网络请求访问框架项目、element组件介绍学习标准管理系统Vue项目
微服务
Linux安装、Nginx反向代理、负载均衡学习Docker学习Jenkins学习
Nexus学习Spring Security学习RabbitMQ学习
Redis学习MongoDB学习MongoDB学习
Nacos学习Spring Session学习Spring Gateway学习
JSR 303学习OpenFeign学习Dubbo学习
Hystrix学习Sentinel学习

文章目录

  • 系列文章目录
  • 前言
  • 一、Sentinel介绍
    • 1. Sentinel介绍
    • 2. Sentinel概念
  • 二、Sentinel代码实现
    • 1. 使用OpenFeign项目
    • 2. 启动Nacos和Redis
    • 3. 添加依赖
    • 4. Sentinel服务下载
    • 5. 启动服务
    • 6. 登录sentinel
    • 7. 添加配置信息
    • 8. 启动项目并访问项目
  • 三、自定义响应
    • 1. 创建SentinelFilterConfig过滤器
    • 2. 创建SentinelConfig配置类
    • 3. 运行项目,查看结果
  • 四、熔断
    • 1. 添加feign配置信息
    • 2. 创建ScoreFeignImpl接口实现类
    • 3. 修改ScoreFeign接口的注解
    • 4. 修改UserServiceImpl实现类方法
    • 5. !!在sentineldemo2项目中!!更改info方法
    • 6. 启动两个项目、测试熔断处理
  • 五、熔断资源
    • 1. 添加setMessage方法
    • 2. 新增trySources方法
    • 3. 添加annotationSources、annotationSourcesError方法
    • 4. 重启两个项目
  • 总结


前言

本文我们要讲述:
Sentinel
通过网盘分享的文件:SpringSession——OpenFeign.zip
链接: https://pan.baidu.com/s/1uKEYyQ80RGMnDsoa5j9v5Q?pwd=tmm5 提取码: tmm5
在下攸攸太上。


一、Sentinel介绍

1. Sentinel介绍

Sentinel是一个面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点来帮助开发者保障微服务的稳定性。

2. Sentinel概念

1、QPS (Queries Per Second):每秒处理的请求数量,用于衡量系统的处理能力。

2、RT (Response Time):响应时间,指的是从发送请求到接收到响应所花费的时间。

3、慢调用 (Slow Calls):响应时间超过一定阈值的调用。

4、慢调用比例 (Slow Call Ratio):慢调用数量占总调用数量的比例。

5、比例阈值 (Threshold):一个介于0到1之间的浮点数,表示阈值的百分比,用于设置异常比例、慢调用比例等。

6、异常比例 (Exception Ratio):发生异常的调用数量占总调用数量的比例。

7、异常数 (Exception Count):发生异常的调用数量。

8、快速失败 (Fail Fast):当QPS超过阈值时,直接限流并抛出异常。适用于线程数限流。

9、排队等待 (Warm Up):每秒可以处理的请求数量有限制,超出限制的请求会进入排队等待一段时间,等待时间过后仍未处理的请求将被限流。适用于QPS限流。

10、Warm Up (Warm Up):在一段时间内逐渐增加服务器的QPS,使其慢慢达到阈值。适用于QPS限流。

11、直接拒绝 (Reject):针对单一资源,当触发阈值时直接拒绝请求。

12、关联 (Association):针对两个资源有关联时,当前资源会为关联资源让步,保证关联资源拥有更大的阈值。

13、链路 (Cascade):从资源入口开始,整个链路的阈值。

14、热点限流 (Hotspot Flow Control):对频繁访问的热点数据进行限流,以减少服务器压力。

15、系统规则 (System Rule):针对硬件层面设置的规则,比如限制CPU的使用率。

16、授权规则 (Authority Rule):根据请求的来源设置限流,实现黑白名单功能。

二、Sentinel代码实现

1. 使用OpenFeign项目

本项目基于OpenFeign的两个项目实现,可以在下面的网盘链接取到
SpringSession——OpenFeign.zip
可以看我之前的OpenFeign学习文章,里面会有介绍

以下更改均在demo-session-01内更改,demo-session-02无需任何改动,如需改动,会特别标出

2. 启动Nacos和Redis

在这里插入图片描述

3. 添加依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId>
</dependency>

4. Sentinel服务下载

https://github.com/alibaba/Sentinel/releases

5. 启动服务

java -jar sentinel-dashboard.jar
在这里插入图片描述

6. 登录sentinel

访问网页:http://localhost:8080/#/login
在这里插入图片描述
登录后,点击首页出现欢迎页
在这里插入图片描述

7. 添加配置信息

在application.yml配置文件中,Spring标签改为如下

spring:session:store-type: rediscloud:sentinel:transport:dashboard: localhost:8080

8. 启动项目并访问项目

在这里插入图片描述
刷新Sentinel页面,点击进入限流界面
在这里插入图片描述
在这里插入图片描述
快速刷新http://127.0.0.1:100/user
在这里插入图片描述

三、自定义响应

1. 创建SentinelFilterConfig过滤器

package com.jjy.config;import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.servlet.Filter;@Configuration
public class SentinelFilterConfig {@Beanpublic FilterRegistrationBean<Filter> filterFilterRegistrationBean(){FilterRegistrationBean<Filter> result = new FilterRegistrationBean<>(new CommonFilter());result.addUrlPatterns("/*");return result;}
}

2. 创建SentinelConfig配置类

package com.jjy.config;import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import com.alibaba.fastjson.JSON;
import com.jjy.util.Result;
import org.springframework.context.annotation.Configuration;@Configuration
public class SentinelConfig {public SentinelConfig() {WebCallbackManager.setUrlBlockHandler((request, response, e) -> {Result error = Result.error();error.setMessage("被限流了!");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8");response.getWriter().write(JSON.toJSONString(error));});}
}

3. 运行项目,查看结果

重新新增流控规则
在这里插入图片描述
疯狂刷新项目界面
在这里插入图片描述

四、熔断

1. 添加feign配置信息

feign.sentinel.enabled=true

在这里插入图片描述

2. 创建ScoreFeignImpl接口实现类

package com.jjy.feign.impl;import com.jjy.entry.Score;
import com.jjy.entry.UserDto;
import com.jjy.feign.ScoreFeign;
import com.jjy.util.Result;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;@Service
public class ScoreFeignImpl implements ScoreFeign {@Overridepublic Result info() {List<Score> list = new ArrayList<>();for (int i = 0; i < 3; i++) {Score score = new Score();score.setName("name" + i);score.setScore(99.99);list.add(score);}return  Result.ok().put("data",list);}@Overridepublic Result id(String id) {return null;}@Overridepublic Result add(UserDto user) {return null;}
}

3. 修改ScoreFeign接口的注解

同时需要import一个ScoreFeignImpl

@FeignClient(value = "openfeignDemo2", fallback = ScoreFeignImpl.class) //fallback 一旦出现熔断,要走哪个类。

在这里插入图片描述

4. 修改UserServiceImpl实现类方法

修改UserServiceImpl实现类内info的第30行的result.get(“data”),改为data
在这里插入图片描述

5. !!在sentineldemo2项目中!!更改info方法

在ScoreController类中,更改返回值的key,将list改为data。
在这里插入图片描述

6. 启动两个项目、测试熔断处理

在这里插入图片描述
关掉sentineldemo2项目模拟宕机效果。
在这里插入图片描述

五、熔断资源

1. 添加setMessage方法

在Result工具类中,添加setMessage方法

    public Result setMessage(String message){this.message = message;return this;}

2. 新增trySources方法

在UserController类中,新增trySources方法

    @GetMapping("/try")public Result trySources(){String sourcesName = "testTry";try(Entry entry = SphU.entry(sourcesName)) { //SphU.entry方法通过传入资源名称和其他参数来获取访问令牌。如果获取到令牌,则可以访问目标资源;如果没有获取到令牌,则无法访问对应资源。return Result.ok();} catch (BlockException e) {return Result.error().setMessage("被限流了!");}}

包导这三个

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;

在这里插入图片描述

3. 添加annotationSources、annotationSourcesError方法

在UserController类中,新增trySources方法

    @GetMapping("/annotation")@SentinelResource(value = "testAnnotation", blockHandler = "annotationSourcesError")public Result annotationSources() {return Result.ok();}public Result annotationSourcesError(BlockException e) {return Result.error().setMessage("被限流了!");}

在这里插入图片描述

4. 重启两个项目

新增流量控制规则
在这里插入图片描述
注意给testTry加,不要给/user/try加,如果加错了,要删掉
在这里插入图片描述
访问项目,刷新几次,出现如下信息
在这里插入图片描述
在这里插入图片描述


总结

本文讲述了:
Sentinel:限制流量、熔断资源
在下攸攸太上,绿联风扇挺好用。


http://www.mrgr.cn/news/43309.html

相关文章:

  • Python 中的可调用对象
  • WordPress修改固定链接后301的重定向方法
  • 【AIGC】ChatGPT提示词Prompt助力自媒体内容创作升级
  • OpenCV马赛克
  • 软件设计师——数据结构
  • Windows系统编程(三)进程与线程二
  • 如何在 PHP 中使用 array_unique 函数去重关联数组?
  • 玩具CPSC认证办理流程
  • 力扣10.5
  • MS-900认证:Microsoft 365 Certified: Fundamentals
  • 【FreeRTOS】移植教程与官方文档
  • Leecode刷题之路第十天之正则表达式匹配
  • 安卓AI女友项目之安卓AI虚拟数字人整合开发
  • 【深度学习】自动微分——Autodiff or Autograd?
  • 使用JavaScript写一个网页端的四则运算器
  • 3.JVM
  • AI 激活新势能,中小企业全媒体营销绽放无限可能
  • struct和C++的类
  • 关键字:static
  • 【RISCV指令集手册】向量扩展v1.0