文章目录

1.基本介绍1.Sentinel是什么2.Sentinel主要特性3.Sentinel核心功能1.流量控制2.熔断降级3.消息削峰填谷

4.Sentinel两个组成部分

2.Sentinel控制台显示1.需求分析2.下载3.运行1.进入cmd2.输入java -jar sentinel-dashboard-1.8.0.jar3.查看默认端口8080

4.访问1.账号和密码都是sentinel2.登录成功3.退出就在cmd输入ctrl + c

5.切换端口1.在启动时携带端口参数 --server.port=8081(端口最大65535)2.演示3.netstat -anb | more 查看端口监听情况(空格显示更多)

3.Sentinel监听指定微服务1.示意图(在10004模块配置)2.pom.xml引入Sentinel3.application.yml 配置sentinel与服务端通信4.测试1.启动Nacos(启不启动都可以)和Sentinel2.启动10004微服务3.nacos查看注册情况4.浏览器输入 http://localhost:10004/member/get/15.http://localhost:8080 查看Sentinel实时监控

5.QPS和Sentinel懒加载

4.Sentinel 流量控制介绍 + QPS实例1.配置界面2.基本介绍3.流量控制实例-QPS1.需求分析2.找到/member/get/1的流量控制界面3.选择QPS,单机阈值设置成14.可以查看流控规则5.点击编辑即可修改

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

5.流控规则实时生效原因6.携带参数方式进行限流1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get1.代码:2.修改限流规则3.测试,使用id=2也会被限流

2.方式二:使用URL资源清洗1.基本介绍2.com/sun/springcloud/controller/CustomerUrlCleaner.java 将URL进行资源清洗3.修改限流规则4.访问测试,成功限流

7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!

5.Sentinel 流量控制—线程数1.需求分析2.修改流控规则3.浏览器输入http://localhost:10004/member/get/1 并快速刷新4.为了看到效果,让线程休眠一秒5.重启10004模块(需要重新配置限流规则),快速发送请求

6.Sentinel 流量控制—关联1.需求分析2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t23.配置t1的限流规则为关联t24.postman模拟高并发测试1.测试请求t22.点击save3.New Collection4.命名后创建5.点击集合右边三个点,然后Run collection6.选择迭代次数和间隔毫秒数,然后Run test7.浏览器输入 http://localhost:10004/t1 ,发现被限流

7.Sentinel 流量控制—Warm up1.基本介绍2.需求分析3.具体配置1.启动Sentinel2.启动Nacos3.启动10004微服务,成功注册4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台5.修改流控规则6.测试前三秒的QPS为9 / 3 = 3,三秒后的QPS为9

8.Sentinel 流量控制—排队等待1.基本介绍2.需求分析3.具体配置

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

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

3.application.yml 配置sentinel与服务端通信

注意这里与sentinel相关的就只有配置sentinel的部分这里开启的port是在本机上进行监听,作为客户端与sentinel的服务端进行通信,并且如果8719端口被占用,则会自动将端口号加一直到找到可用的端口

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.代码:

/**

* 根据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改变了

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

// 编写两个测试的接口,路由分别为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就会被限流

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: