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.xdnf.cn/news/1555236.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基本命令及vim应用实训练习

Linux基本命令及vim应用实训练习 1. 2. 3. 4. 5. 使用man cp找出

序列化与反序列化基础及反序列化漏洞(附案例)

参考文章&#xff1a; [web安全原理]PHP反序列化漏洞 - 笑花大王 - 博客园 (cnblogs.com) 一、概念 为了能有效的存储数据而不丢失数据的类型和内容&#xff0c;经常需要通过序列化对数据进行处理&#xff0c;将数据进行序列化后&#xff0c;会生成一个字符串&#xff0c;字符…

linux安装minianconda

文章目录 我的配置从清华镜像源里下载minianaconda安装自定义安装位置是否关闭打开终端默认进入anaconda的设置&#xff1f;&#x1f315;配置清华镜像源 我的配置 ubuntu 22.04LTS 从清华镜像源里下载minianaconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/minicond…

带你深入浅出设计模式:七、代理模式:设计模式中的中间人

此为设计模式第七谈&#xff01; 用总-分-总的结构和生活化的例子给你讲解设计模式&#xff01; 码农不易&#xff0c;各位学者学到东西请点赞收藏支持支持&#xff01; 开始部分&#xff1a; 总&#xff1a;代理模式为其他对象提供一个代理来控制这个对象的访问&#xff0c…

openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度

文章目录 openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样&#xff0c;需要调整贴片任务中的元件旋转角度笔记查看自己图纸中的封装的0角度方法贴片任务的角度值范围编带规定的0角度根据编带规定的元件0角度来调整贴片的元件旋转角度如果是托盘飞达备注备注END ope…

Python并发编程(3)——Python多线程详解介绍

左手编程&#xff0c;右手年华。大家好&#xff0c;我是一点&#xff0c;关注我&#xff0c;带你走入编程的世界。 公众号&#xff1a;一点sir&#xff0c;关注领取python编程资料 Python 的多线程入门是非常简单的&#xff0c;直接导入threading模块就可以开始多线程之旅了。模…

弧形导轨驱动器高效使用技巧!

弧形导轨驱动器是一种用于驱动滑座沿着导轨做弧线运动的设备&#xff0c;其用方法因具体型号和应用场景的不同而有所差异&#xff0c;通常可以归纳为以下几个步骤&#xff1a; 1、安装前要明确弧形导轨的使用需求&#xff0c;根据需求选择合适的弧形导轨驱动器&#xff0c;准备…

深度学习基础—目标检测算法

目录 1.滑动窗口算法 2.滑动窗口的卷积实现 &#xff08;1&#xff09;1*1卷积的作用 &#xff08;2&#xff09;全连接层转化为卷积层 &#xff08;3&#xff09;在卷积层上实现滑动窗口 3.Bounding Box预测&#xff08;YOLO算法&#xff09; 1.滑动窗口算法 假如要构建一…

【AI知识点】泊松分布(Poisson Distribution)

泊松分布&#xff08;Poisson Distribution&#xff09; 是统计学和概率论中的一种离散概率分布&#xff0c;通常用于描述在固定时间或空间内&#xff0c;某个事件发生的次数。该分布适用于稀有事件的建模&#xff0c;特别是当事件发生是独立的、随机的&#xff0c;且发生的平均…

PCL 点云体素滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 体素滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

【RISCV指令集手册】向量扩展v1.0

概述 从rvv 0.9说起 此前写过向量扩展0.9的阅读记录&#xff0c;三年已过&#xff0c;本以为不再参与RVV的相关开发&#xff0c;奈何造化弄人&#xff0c;旧业重操&#xff0c;真就世事难料呀。 总的来说1.0版本相比0.9版本的扩充了较多内容&#xff0c;但大部分为指令功能的…

YOLOv8改进线性注意力模块 ICCV2023 FLatten Transformer

1,原理部分 论文地址:2308.00442 (arxiv.org) 在将 Transformer 模型应用于视觉任务时,自我注意的二次计算复杂性一直是一个持续的挑战。另一方面,线性注意力通过精心设计的映射函数近似 Softmax 操作,通过其线性复杂性提供了一种更有效的替代方案。然而,当前的线性注意…

使用LlamaIndex构建RAG

使用LlamaIndex构建RAG 一、什么是LlamaIndex二、环境准备2.1虚拟环境创建及基础安装2.2安装llamaIndex相关2.3下载词向量模型2.4下载NLTK资源2.5准备LLM模型2.6不使用RAG情况下的问答效果2.7使用llama-index的效果2.7.1安装llama-index词嵌入依赖2.7.2获取知识库2.7.3准备代码…

信号检测理论(Signal Detection Theory, SDT)

信号检测理论&#xff08;Signal Detection Theory, SDT&#xff09;模拟是一种实验设计&#xff0c;用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域&#xff0c;信号检测理论都非常重要。 一、基础概念&#xff1a; 在信…

TIBCO Jaspersoft Studio 创建数据源并进行测试

1、连接数据源&#xff1a; 右键Data Adapters &#xff0c;然后新建 根自己的情况&#xff0c;进行创建&#xff0c;这里测试用的是excel表格。 2、新建Jasper Report&#xff0c;然后我们选择刚刚创建的数据源 这样report就建好了&#xff0c;然后我们进行测试。 3、先把不…

【源码+文档】基于SpringBoot+Vue的酒店管理系统

&#x1f6a9;如何选题&#xff1f; 如何选题、让题目的难度在可控范围&#xff0c;以及如何在选题过程以及整个毕设过程中如何与老师沟通&#xff0c;这些问题是需要大家在选题前需要考虑的&#xff0c;具体的方法我会在文末详细为你解答。 &#x1f6ad;如何快速熟悉一个项目…

文心智能体——制作你的专属AI

随着社会的进步和互联网技术的发展&#xff0c;人工智能领域正蓬勃发展。最近几年关于人工智能的新闻日渐增多并且成为了当代最大的热点&#xff0c;所有的领域都在引进AI、训练AI、使用AI&#xff0c;AI正逐步融入人们的生活。从前几年chatGPT大语言模型的横空出世&#xff0c…

Finops成本优化企业实践-可视化篇

引言&#xff1a;上一章讨论了finops的一些方法论&#xff0c;笔者在拿到finops官方认证finops-engineer certificate之后&#xff0c;将方法论运用到所在项目组中&#xff0c;并于今年完成了40%的费用节省。在此将这些实践方法总结沉淀&#xff0c;与大家分享。实践包括三篇&a…

[Python学习日记-38] Python 中的函数的名称空间

[Python学习日记-38] Python 中的函数的名称空间 简介 名称空间 作用域查找顺序 简介 在前面学习函数的时候我们发现&#xff0c;函数内部也有一个内存空间是用于存储函数自己的一些变量的&#xff0c;及时这个变量名与外部的变量名一样是也没关系&#xff0c;Python 会优先…

SpringCloud Alibaba - Eureka注册中心,Nacos配置中心

Eureka 1、创建服务端 server:port: 8761 # eureka 默认端口spring:application:name: eureka-server # 应用名称&#xff08;微服务中建议必须定义应用名称&#xff09; SpringBootApplication EnableEurekaServer // 开启eureka注册中心功能 public class EurekaServerAppli…