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

Spring Cloud(微服务)学习篇(七)

Spring Cloud(微服务)学习篇(七)

1.使用代码的方式实现流量限制规则

1.1 变更SentinelController类

1.1.1 加入的代码

//流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则@PostConstructpublic void FlowRule(){List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule = new FlowRule();rule.setResource("find");//资源名// set limit qps to 10rule.setCount(7);//并发数 1s钟最多执行次数rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}

1.2.1 完整的SentinelController类代码

package com.zlz.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;@RestController
public class SentinelController {int count=0;@SentinelResource("find")//资源名称和下方一致@RequestMapping("find")public String find(){count++;System.out.println("进入用户查询方法");return "查询用户:"+count;}//流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则@PostConstructpublic void FlowRule(){List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule = new FlowRule();rule.setResource("find");//资源名// set limit qps to 10rule.setCount(7);//并发数 1s钟最多执行次数rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}
}

1.2 测试

1.2.1 查看Mysql服务是否打开(只有mysql服务打开,启动nacos窗口才正常)

在这里插入图片描述

1.2.2 启动nacos服务

在这里插入图片描述

1.2.3 启动Sentinel控制台项目

a 找到sentinel控制台jar包所在的位置➡输入java -jar sentinel-dashboard.jar➡回车

在这里插入图片描述

b 回车后的界面

在这里插入图片描述

c 通过浏览器登录进入Sentinel后台界面
c.1 在浏览器输入地址localhost:8080后跳转的页面

在这里插入图片描述

c.2 输入账户和密码后跳转的页面

在这里插入图片描述

1.2.4 启动用户服务

在这里插入图片描述

1.2.5 点击刷新Sentinal控制台界面➡点击shop-user➡流控规则

在这里插入图片描述

1.2.6 点击编辑

在这里插入图片描述

1.2.7 点击编辑按钮后跳转的页面

在这里插入图片描述

2 对流量限流给出友好提示

2.1 定义方法的形式

2.1.1 更新SentinelController类

a 加入的代码
//    blockHandler就是 限流了应该怎么处理,通常是用于查询的请求,因为这样做本质上是丢弃了这个请求
//    必须要有BlockException e
//需要与原来方法(find方法)的返回值一模一样
//①新增xlHandler方法public String xlHandler(BlockException e){//请求太多放弃掉 查询return "当前访问人数过多 请稍后再试";}
//② 在find方法的@SentinelResource注解里面加上blockHandler = "xlHandler"
b 完整的SentinelController类
package com.zlz.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.zlz.handler.SentinelHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;@RestController
public class SentinelController {int count=0;//blockHandler指定的是方法@SentinelResource(value="find",blockHandler = "xlHandler")//资源名称和下方一致@RequestMapping("find")public String find(){count++;System.out.println("进入用户查询方法");return "查询用户:"+count;}//流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则@PostConstructpublic void FlowRule(){List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule = new FlowRule();rule.setResource("find");//资源名// set limit qps to 10rule.setCount(7);//并发数 1s钟最多执行次数rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}//    blockHandler就是 限流了应该怎么处理
//必须要有BlockException e,若find方法有形参,那么这个方法也得有相应顺序的形参,但是最后一个形参一定是e
//需要与原来方法(find方法)的返回值一模一样public String xlHandler(BlockException e){//原理是请求太多放弃掉查询return "当前访问人数过多 请稍后再试";}
}

2.1.2 测试

a 重新启动用户服务

在这里插入图片描述

b jemeter压力测试
b.1 添加线程组

在这里插入图片描述

b.2 编辑线程组

在这里插入图片描述

b.3 创建HTTP请求

在这里插入图片描述

b.4 编辑HTTP请求

在这里插入图片描述

b.5 在线程组下面创建结果树

在这里插入图片描述

b.6 点击绿色按钮➡点击NO按钮

在这里插入图片描述

b.7 点击前7个的HTTP请求的任意一个,都是正常访问

在这里插入图片描述

b.8 点击后三个的HTTP请求的任意一个,都是显示当前访问人数过多,请稍后再试

在这里插入图片描述

2.2 定义类的方式(处理方法在类中)

2.2.1 在zlz包下创建handler包并创建SentinelHandler类

package com.zlz.handler;import com.alibaba.csp.sentinel.slots.block.BlockException;public class SentinelHandler {//这个方法必须是静态方法public static String xlHandler(BlockException e){//请求太多放弃掉 查询return "当前访问人数过多 请稍后再试";}
}

2.2.2 更新SentinelController类

a 加入的代码
//① 在find方法的@SentinelResource注解里面加上blockHandler = "xlHandler" blockHandlerClass = SentinelHandler.class
b 完整的SentinelController类
package com.zlz.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.zlz.handler.SentinelHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;@RestController
public class SentinelController {int count=0;@SentinelResource(value="find",blockHandler = "xlHandler",blockHandlerClass = SentinelHandler.class)//资源名称和下方一致@RequestMapping("find")public String find(){count++;System.out.println("进入用户查询方法");return "查询用户:"+count;}//流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则@PostConstructpublic void FlowRule(){List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule = new FlowRule();rule.setResource("find");//资源名rule.setCount(7);//并发数 1s钟最多执行次数rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}
}

2.2.2 测试

a 重新启动用户服务

在这里插入图片描述

b jemeter压力测试
b.1 清除之前的结果

在这里插入图片描述

b.2 重新点击绿色按钮➡点击NO按钮

在这里插入图片描述

b.3 点击前7个的HTTP请求的任意一个,都没有限流提示

在这里插入图片描述

b.4 点击后三个的HTTP请求的任意一个,都有限流提示

在这里插入图片描述

相关文章:

Spring Cloud(微服务)学习篇(七)

Spring Cloud(微服务)学习篇(七) 1.使用代码的方式实现流量限制规则 1.1 变更SentinelController类 1.1.1 加入的代码 //流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则PostConstructpublic void FlowRule(){Li…...

嵌入式安防监控项目——前期知识复习

目录 一、概述 二、C语言 三、数据结构 四、IO进程 五、网络 六、ARM体系结构和接口技术 七、系统移植 八、内核驱动 一、概述 我再报班之前学过51和32&#xff0c;不过都是自学的。报班开始先从应用层入手的&#xff0c;C语言和数据结构。只要是个IT专业的大学这都是必…...

SpringAOP——基础知识

AOP AOP全称是Aspect Oriented Programming 即面向切面编程&#xff0c;是对一类统一事务的集中处理 例如&#xff0c;我们的网页许多地方都需要进行登陆验证&#xff0c;这时就需要在很多地方添加重复的验证代码&#xff0c;而AOP可以集中配置需要登陆验证的地方&#xff0c;…...

kafka3.0安装使用

一&#xff1a;定义 Kafka传 统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka最 新定义 &#xff1a; Kafka是 一个开源的 分 布式事件流平台 &#xff08;Event St…...

Centos7(阿里云)_安装Mysql8.0

1.安装MySQL 新人可以试用一个月的阿里云&#xff0c;centos7的 一开始可能确实会自带mariadb&#xff0c;所以可以在网上随便找个教程开始尝试安装MySQL&#xff0c;当然大概率出错&#xff0c;然后此时你的rpm下面已经有了一个版本的mysql安装包。 以我为例&#xff0c;随便…...

【Java】JVM

一、介绍 1.什么是JVM? JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的机器&#xff0c;是通过在实际的计算机上仿真模拟各种功能实现的。JVM包含一套字节码指令集&#xff0c;一组寄存器&#xff0c;一个栈&#xff0c;一个垃圾回收堆和一个存储方法域。JVM屏…...

Linux 和数据库笔记-06

今日内容介绍全天内容无需立马掌握MySQL 的高级功能应用数据库设计ER模型定义: E 代表实体(数据表), R 代表联系(数据表之间对应的字段)![image-20200530092701017](Linux 和数据库 day06 随堂笔记.assets/image-20200530092701017.png)关系常见分类一对一一对多多对多外键如果…...

MySQL面试题-事务篇

1.事务的特性&#xff08;ACID&#xff09; 事务&#xff08;Transaction&#xff09;是指一组操作被看作是一个不可分割的工作单元&#xff0c;这组操作要么全部执行成功&#xff0c;要么全部执行失败。事务的特性通常用 ACID 四个单词来描述&#xff0c;它们分别代表原子性&…...

Linux嵌入式开发 | 汇编驱动LED(1)

文章目录&#x1f697; &#x1f697;Linux嵌入式开发 | 汇编驱动LED&#xff08;1&#xff09;&#x1f697; &#x1f697;初始化IO&#x1f697; &#x1f697;STM32&#x1f697; &#x1f697;使能GPIO时钟&#x1f697; &#x1f697;设置IO复用&#x1f697; &#x1f6…...

什么是EventLoop?怎么测试Node或页面的性能

Event Loop 机制大家应该都有了解。本文利用 EventLoop 去做一个有趣的检测node或页面性能的代码&#xff0c;顺便介绍了一下EventLoop&#xff0c;希望对大家有所帮助&#xff01; Event Loop Event Loop 机制大家应该都有了解。我先重复总结一下。 Node.js 和 Javascript 的…...

1018 锤子剪刀布 1025 反转链表

现给出两人的交锋记录&#xff0c;请统计双方的胜、平、负次数&#xff0c;并且给出双方分别出什么手势的胜算最大。 输入格式&#xff1a; 输入第 1 行给出正整数 N&#xff08;≤10 5 &#xff09;&#xff0c;即双方交锋的次数。随后 N 行&#xff0c;每行给出一次交锋的信…...

卷积神经网络的原理及实现

专栏&#xff1a;神经网络复现目录 卷积神经网络 本章介绍的卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类强大的、为处理图像数据而设计的神经网络。 基于卷积神经网络架构的模型在计算机视觉领域中已经占主导地位&#xff0c;当今…...

【C++知识点】重载

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…...

apscheduler三种定时触发方式

#第一种# date: 特定的时间点触发# 2019-01-01 00:00:00 准时执行# import time # from apscheduler.schedulers.blocking import BlockingScheduler # # def my_job(): # print(time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(time.time()))) # sched BlockingSchedu…...

802.11 service服务类型

802.11 serviceservice定义service分类按照模块分为两类按照功能分为六类数据传输相关服务分布式服务DS&#xff08;Distribution Service&#xff09;整合服务IS&#xff08;Integration Service&#xff09;关联&#xff08;association&#xff09;重关联&#xff08;reasso…...

pytest测试框架——allure报告

文章目录一、allure的介绍二、allure的运行方式三、allure报告的生成方式一、在线报告、会直接打开默认浏览器展示当前报告方式二、静态资源文件报告&#xff08;带index.html、css、js等文件&#xff09;&#xff0c;需要将报告布置到web服务器上。四、allure中装饰器1、实现给…...

SQLI-Labs(3)8-14关【布尔盲注和时间盲注】

目录 第八关 第九关&#xff1a; 第十关 第十一关 第十二关 第十三关 第十四关 第八关 我们用测试语句来测试是否为注入点 从上图中得知存在注入点&#xff0c;那么接下来就是爆列 一共有三列&#xff0c;接下来用union select 和报错注入都试一下发现没有回显点&…...

ESP32学习笔记03-日志打印

ESP32日志 日志分为5个等级 ESP_LOGE - error (lowest)ESP_LOGW - warningESP_LOGI - infoESP_LOGD - debugESP_LOGV - verbose (highest)API 0.头文件 #include "esp_log.h"1.给一个日志标签设置等级...

mongoTemplate非string类型模糊查询

需求 为方便使用人员对任务Task的搜索&#xff0c;需要根据number实现模糊搜索。 背景 之前设计的number是long类型&#xff0c;但是mongodb只支持string类型的正则匹配。 方案 修改number为string类型&#xff1b;新增一个冗余字段&#xff0c;用于模糊查询&#xff1b;在…...

Redis是单线程还是多线程?Redis的10种数据类型,有哪些应用场景?

目录专栏导读一、同样是缓存&#xff0c;用map不行吗&#xff1f;二、Redis为什么是单线程的&#xff1f;三、Redis真的是单线程的吗&#xff1f;四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...