文章目录
-
- 1.基本介绍
- 2.Sentinel控制台显示
-
-
- 1.需求分析
- 2.下载
- 3.运行
-
- 1.进入cmd
- [2.输入java -jar sentinel-dashboard-1.8.0.jar](#2.输入java -jar sentinel-dashboard-1.8.0.jar)
- 3.查看默认端口8080
- 4.访问
-
- 1.账号和密码都是sentinel
- 2.登录成功
- [3.退出就在cmd输入ctrl + c](#3.退出就在cmd输入ctrl + c)
- 5.切换端口
-
- [1.在启动时携带端口参数 --server.port=8081(端口最大65535)](#1.在启动时携带端口参数 --server.port=8081(端口最大65535))
- 2.演示
- [3.netstat -anb | more 查看端口监听情况(空格显示更多)](#3.netstat -anb | more 查看端口监听情况(空格显示更多))
-
- 3.Sentinel监听指定微服务
-
-
- 1.示意图(在10004模块配置)
- 2.pom.xml引入Sentinel
- [3.application.yml 配置sentinel与服务端通信](#3.application.yml 配置sentinel与服务端通信)
- 4.测试
-
- 1.启动Nacos(启不启动都可以)和Sentinel
- 2.启动10004微服务
- 3.nacos查看注册情况
- [4.浏览器输入 http://localhost:10004/member/get/1](#4.浏览器输入 http://localhost:10004/member/get/1)
- [5.http://localhost:8080 查看Sentinel实时监控](#5.http://localhost:8080 查看Sentinel实时监控)
- 5.QPS和Sentinel懒加载
-
- [4.Sentinel 流量控制介绍 + QPS实例](#4.Sentinel 流量控制介绍 + QPS实例)
-
-
- 1.配置界面
- 2.基本介绍
- 3.流量控制实例-QPS
- 4.测试
- 5.流控规则实时生效原因
- 6.携带参数方式进行限流
-
- [1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get](#1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get)
- 2.方式二:使用URL资源清洗
- 7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!
-
- [5.Sentinel 流量控制---线程数](#5.Sentinel 流量控制—线程数)
-
-
- 1.需求分析
- 2.修改流控规则
- [3.浏览器输入http://localhost:10004/member/get/1 并快速刷新](#3.浏览器输入http://localhost:10004/member/get/1 并快速刷新)
- 4.为了看到效果,让线程休眠一秒
- 5.重启10004模块(需要重新配置限流规则),快速发送请求
-
- [6.Sentinel 流量控制---关联](#6.Sentinel 流量控制—关联)
-
-
- 1.需求分析
- [2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2](#2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2)
- 3.配置t1的限流规则为关联t2
- 4.postman模拟高并发测试
-
- 1.测试请求t2
- 2.点击save
- [3.New Collection](#3.New Collection)
- 4.命名后创建
- [5.点击集合右边三个点,然后Run collection](#5.点击集合右边三个点,然后Run collection)
- [6.选择迭代次数和间隔毫秒数,然后Run test](#6.选择迭代次数和间隔毫秒数,然后Run test)
- [7.浏览器输入 http://localhost:10004/t1 ,发现被限流](#7.浏览器输入 http://localhost:10004/t1 ,发现被限流)
-
- [7.Sentinel 流量控制---Warm up](#7.Sentinel 流量控制—Warm up)
-
-
- 1.基本介绍
- 2.需求分析
- 3.具体配置
-
- 1.启动Sentinel
- 2.启动Nacos
- 3.启动10004微服务,成功注册
- [4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台](#4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台)
- 5.修改流控规则
- 6.测试
-
- [前三秒的QPS为9 / 3 = 3,三秒后的QPS为9](#前三秒的QPS为9 / 3 = 3,三秒后的QPS为9)
-
- [8.Sentinel 流量控制---排队等待](#8.Sentinel 流量控制—排队等待)
1.基本介绍
1.Sentinel是什么

2.Sentinel主要特性

3.Sentinel核心功能
1.流量控制

2.熔断降级

3.消息削峰填谷

4.Sentinel两个组成部分

2.Sentinel控制台显示
1.需求分析

2.下载

3.运行
1.进入cmd
2.输入java -jar sentinel-dashboard-1.8.0.jar

3.查看默认端口8080

4.访问
1.账号和密码都是sentinel

2.登录成功

3.退出就在cmd输入ctrl + c
5.切换端口
1.在启动时携带端口参数 --server.port=8081(端口最大65535)
2.演示

3.netstat -anb | more 查看端口监听情况(空格显示更多)

3.Sentinel监听指定微服务
1.示意图(在10004模块配置)

2.pom.xml引入Sentinel
xml
<!-- 引入sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
3.application.yml 配置sentinel与服务端通信
- 注意这里与sentinel相关的就只有配置sentinel的部分
- 这里开启的port是在本机上进行监听,作为客户端与sentinel的服务端进行通信,并且如果8719端口被占用,则会自动将端口号加一直到找到可用的端口
yaml
server:
port: 10004 # 配置服务端口
spring:
application:
name: member-service-nacos-provider # 配置服务的名称,名字任意这里与项目
# 配置naocs
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置nacos的地址
# 配置sentinel
sentinel:
transport:
dashboard: localhost:8080 # 配置sentinel的地址
port: 8719 # 配置sentinel的端口,当端口冲突时,会自动+1,直到找到可用端口
# 暴露所有的监控点
management:
endpoints:
web:
exposure:
include: "*"
mybatis:
mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
type-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
4.测试
1.启动Nacos(启不启动都可以)和Sentinel


2.启动10004微服务

3.nacos查看注册情况

4.浏览器输入 http://localhost:10004/member/get/1

5.http://localhost:8080 查看Sentinel实时监控
- 注意,这个实时监控只要一段时间不访问,数据就会暂时消失


5.QPS和Sentinel懒加载

4.Sentinel 流量控制介绍 + QPS实例
1.配置界面

2.基本介绍


3.流量控制实例-QPS
1.需求分析

2.找到/member/get/1的流量控制界面


3.选择QPS,单机阈值设置成1

4.可以查看流控规则

5.点击编辑即可修改

4.测试
1.步骤

2.浏览器快速访问http://localhost:10004/member/get/1,可以看到被限流了

5.流控规则实时生效原因

6.携带参数方式进行限流
1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get
1.代码:
java
/**
* 根据id来获取某个会员的信息
*
* @param id 使用请求参数的形式传入参数
* @return 返回json格式的数据
*/
@GetMapping("/member/get") // 这里修改成请求参数的形式
public Result getMemberById(@RequestParam("id") Long id) {
Member member = memberService.queryMemberById(id);
if (member != null) {
return Result.success("查询成功!member-service-nacos-provider-10004", member);
} else {
return Result.error("402", "ID= " + id + "不存在");
}
}
2.修改限流规则

3.测试,使用id=2也会被限流

2.方式二:使用URL资源清洗
1.基本介绍

2.com/sun/springcloud/controller/CustomerUrlCleaner.java 将URL进行资源清洗

- 注意:这里的资源清洗只是表示返回给Sentinel的URL改变了
java
package com.sun.springcloud.controller;
import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
/**
* Description: URL资源清洗
*
* @Author sun
* @Create 2024/3/28 16:17
* @Version 1.0
*/
@Component // 注入到spring容器中
public class CustomerUrlCleaner implements UrlCleaner {
@Override
public String clean(String originUrl) {
// 判断是否为空
if (StringUtils.isBlank(originUrl)) {
return originUrl;
}
// 如果是/member/get开头的url,就将其清洗为/member/get/*
if (originUrl.startsWith("/member/get")) {
return "/member/get/*";
}
return originUrl;
}
}
3.修改限流规则

4.访问测试,成功限流

7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!
5.Sentinel 流量控制---线程数
1.需求分析
- 一次请求就是一个线程

2.修改流控规则

3.浏览器输入http://localhost:10004/member/get/1 并快速刷新
- 这里并没有被限流,原因是,第一次请求开启了一个工作线程,在第二次请求到达之前,上一个工作线程已经关闭

4.为了看到效果,让线程休眠一秒

5.重启10004模块(需要重新配置限流规则),快速发送请求
- 成功限流

6.Sentinel 流量控制---关联
1.需求分析
- 简单来说就是t1关联t2,当t2的QPS超过1,则t1被限流

2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2
java
// 编写两个测试的接口,路由分别为t1和t2
@GetMapping("/t1")
public String t1() {
return "t1";
}
@GetMapping("/t2")
public String t2() {
return "t2";
}
3.配置t1的限流规则为关联t2

4.postman模拟高并发测试
1.测试请求t2

2.点击save

3.New Collection

4.命名后创建

5.点击集合右边三个点,然后Run collection

6.选择迭代次数和间隔毫秒数,然后Run test

7.浏览器输入 http://localhost:10004/t1 ,发现被限流

7.Sentinel 流量控制---Warm up
1.基本介绍

2.需求分析
- 简单来说假如最终要到达的QPS为90,设置的预热时间为3s,则在3s内,QPS只能为90/3=30,而在3s后QPS逐渐增加,直到为90

3.具体配置
1.启动Sentinel

2.启动Nacos

3.启动10004微服务,成功注册

4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台

5.修改流控规则

6.测试
前三秒的QPS为9 / 3 = 3,三秒后的QPS为9

8.Sentinel 流量控制---排队等待
1.基本介绍
排队等待策略只有在超过了QPS的情况下才会生效,也就是假如设置的QPS为1,就表示1s只能处理一个请求,一旦1s内有两个请求,那么第二个请求就会进行排队等待,当第一个请求完成之后才会处理第二个请求。
关于设置的超时时间,表示等待的时间一旦超过了这个时间就会被限流
需要注意的是,如果想要启动排队等待的流控策略,则阈值类型就必须要是QPS
2.需求分析

3.具体配置
- 这样配置就表示1s内只能有一个请求,如果有第二个就会进行排队等待,直到第一个请求处理完,一旦等待时间超过1s就会被限流
