10.SpringCloud Alibaba Sentinel

傷城~ 2023-09-27 13:06 190阅读 0赞

10.SpringCloud Alibaba Sentinel

Sentinel基础

官网

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

快速开始:https://sentinelguard.io/zh-cn/docs/quick-start.html

中文文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

Sentinel是什么

Sentinel概述

在这里插入图片描述

Sentinel的主要特性

在这里插入图片描述

Sentinel可以完成的功能:绿色方框列出的部分
一句话:Sentinel:分布式系统的流量防卫兵,保护你的微服务

Sentinel核心功能

流量控制

例子

在这里插入图片描述

熔断降级

在这里插入图片描述

在这里插入图片描述

系统负载保护

在这里插入图片描述

消息削峰填谷

在这里插入图片描述

Sentinel两个组成部分

在这里插入图片描述

Sentinel控制台

需求分析/图解

在这里插入图片描述

下载

http://github.com/alibaba/Sentinel/releases/tag/v1.8.0

运行

指令:java -jar sentinel-dashboard-1.8.0.jar

在这里插入图片描述

注意:Sentinel 控制台 默认端口是8080

访问

浏览器:http://localhost:8080/

账号密码都是:sentinel

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NyQt4zs-1670145631540)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123180834871.png)\]

登录成功后控制台页面,目前都是空的,因为sentinel还没有进行流量监控

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-miOLEeOp-1670145631540)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123180945837.png)\]

注意事项和细节

切换端口号启动

java -jar sentinel-dashboard-1.8.0.jar —server.port=9999

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ivfqt7yF-1670145631541)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123181223488.png)\]

Sentinel监控微服务

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sri9g603-1670145631541)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123181920088.png)\]

示意图

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8egJTKUb-1670145631542)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123181906646.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxC4KBNr-1670145631542)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123182013117.png)\]

代码/配置实现

在member-service-nacos-provider-10004 添加pom.xml 依赖
  1. <!-- 引入alibaba-sentinel starter 使用版本仲裁-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5. </dependency>
在member-service-nacos-provider-10004 配置application.yml
  1. spring:
  2. application:
  3. name: member-service-nacos-provider #配置应用的名称
  4. datasource:
  5. type: com.alibaba.druid.pool.DruidDataSource
  6. url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  7. username: root
  8. password: 123456
  9. #配置nacos
  10. cloud:
  11. nacos:
  12. discovery:
  13. server-addr: localhost:8848 #配置 Nacos Server的地址
  14. sentinel:
  15. transport:
  16. dashboard: localhost:8080 #指定sentinel控制台的地址
  17. # 解读transport.port
  18. # 1.transport.port 端口配置会在被监控的微服务对应主机上启动 Http Server
  19. # 2.该Http Server 会与Sentinel 控制台进行交互
  20. # 3.比如sentinel 控制台添加了一个限流规则,会把规则数据push 给这个Http Server 接收
  21. # Http Server 再将中国规则注册到Sentinel 中
  22. # 4.简单的讲:transport.port 指定被监控的微服务应用于Sentinel 控制台交互的端口
  23. # 5.默认端口是 8719,假如被占用了,就会自动的从8719开始依次+1扫描,直到找到一个没有被占用的端口
  24. port: 8719 # 指定端口

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udIKg2iJ-1670145631542)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123190638937.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFQW9Euo-1670145631543)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123191424876.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N2LavAmF-1670145631543)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123191439571.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuoYPQDe-1670145631543)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123191454799.png)\]

Sentinel流量控制

规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nzq9Lp03-1670145631544)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123195523334.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55L31Tx5-1670145631544)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123195738409.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rpPE7ISP-1670145631544)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123200159210.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0gYB91x-1670145631545)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221123200236006.png)\]

流量控制实例-QPS

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y7X8fMtm-1670145631545)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124092832470.png)\]

配置实现步骤
1.为/member/get/1 增加流控规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNmEIcYx-1670145631545)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124093425215.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4K8eYJ8-1670145631546)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124093546235.png)\]

2.在流控规则菜单,可以看到新增的流控规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f5tDxUlP-1670145631546)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124093753306.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1x4tyHbE-1670145631546)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124093831213.png)\]

Sentinel 控制台监控页面

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k7YgaRTt-1670145631547)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124093948088.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vF5mxjFu-1670145631547)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124094001598.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s39XQA9Q-1670145631547)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124100316279.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8Gl8hXk-1670145631548)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124100351474.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27gEUqUQ-1670145631548)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124095012749.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Agg0cJ1I-1670145631548)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124101736917.png)\]

方案2创建 CustomUrlCleaner.java 对请求路径进行清洗
  1. package com.hspedu.springcloud.controller;
  2. import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class CustomUrlCleaner implements UrlCleaner {
  7. @Override
  8. public String clean(String originUrl) {
  9. // 资源清理 /member/get/1
  10. /**
  11. * public static boolean isBlank(String str) {
  12. * int strLen;
  13. * if (str == null || (strLen = str.length()) == 0) {
  14. * return true;
  15. * }
  16. * for (int i = 0; i < strLen; i++) {
  17. * if ((Character.isWhitespace(str.charAt(i)) == false)) {
  18. * return false;
  19. * }
  20. * }
  21. * return true;
  22. * }
  23. */
  24. // isBlank就是判断 originUrl!=null && originUrl 有长度 && originUrl!=""
  25. if (StringUtils.isBlank(originUrl)){
  26. return originUrl;
  27. }
  28. // 如果originUrl是以/member/get开头,进行处理
  29. if (originUrl.startsWith("/member/get")){
  30. // 解读
  31. // 1.如果请求的接口是/member/get 开头的,比如 /member/get/1 或/member/get/10
  32. // 2.给sentinel 返回资源名为/member/get/*
  33. // 3.在sentinel 对 /member/get/* 添加流控规则即可
  34. return "/member/get/*";
  35. }
  36. return originUrl;
  37. }
  38. }

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8J7iUPA-1670145631549)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124101845699.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnqrdsHP-1670145631549)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124102233858.png)\]

流量控制实例-线程数

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4907tGd-1670145631549)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124102614417.png)\]

配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EBWJEjH8-1670145631550)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124102932061.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4jYYmK94-1670145631550)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103044289.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zZZgyiC-1670145631550)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103113651.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cABniPlm-1670145631551)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103207301.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uilVqlqD-1670145631551)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103221642.png)\]

结果页面

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2hBXNgVm-1670145631551)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103249095.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sVnz86tO-1670145631552)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103443770.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b8gnzGIO-1670145631552)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103655992.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fdnEDxhc-1670145631552)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124103750896.png)\]

流量控制实例-关联

关联的含义

当关联的资源达到阈值时,就限流自己

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8T8rr4Rv-1670145631553)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124104522591.png)\]

配置实现步骤
在MemberController 添加t1 和 t2 接口

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GtwDjhYB-1670145631553)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124105314270.png)\]

在Sentinel界面配置

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akwXa5lM-1670145631553)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124105455039.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSmuq16x-1670145631553)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124105821399.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cIKSfkE-1670145631554)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124105927434.png)\]

测试

在这里插入图片描述

Postman 模拟高并发访问/t2

1.创建新的collection
\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmunRZR7-1670145631554)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124110834473.png)\]

2.创建新的 request 放到到一个刚创建的collection中

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aijuxSLG-1670145631555)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111017040.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o4IPYs7C-1670145631555)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111050607.png)\]

3.设置 run collection 参数,并运行

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEWCR2Gb-1670145631555)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111149728.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTilcApq-1670145631555)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111213730.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EY5BRJ0G-1670145631556)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111428020.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66B4yuaG-1670145631556)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111619625.png)\]

流量控制实例-Warm up

Warm up 介绍

Warm up 称为冷启动/预热

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UG4DhFCK-1670145631556)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111720002.png)\]

2.一张图

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xY2qpbQO-1670145631557)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124113522772.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLxeDrWp-1670145631557)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124113552550.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9o3meaZ-1670145631557)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124113823173.png)\]

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBSWMHS9-1670145631558)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124115217765.png)\]

配置实现步骤
1.为/t2增加流控规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWgi2v6W-1670145631558)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124115612233.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mnvq0ZKq-1670145631558)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124115629790.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63JitM0v-1670145631559)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124111700450.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7LvptdHU-1670145631559)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124115732689.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmfXGZsD-1670145631560)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124115808003.png)\]

流量控制实例-排队

排队介绍

在这里插入图片描述

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkxVDOrO-1670145631560)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124140425523.png)\]

修改业务类

修改 MemberController.java 的 t2()方法

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytTtGB2J-1670145631561)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141134282.png)\]

配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Up0dmpxI-1670145631561)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141344001.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8HODQDtA-1670145631561)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141447619.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R33MQ4zp-1670145631562)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141513091.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-07qXJk9O-1670145631562)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141552331.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsqPkFKV-1670145631562)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124141720936.png)\]

Sentinel熔断降级

线程堆积引出熔断降级

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6Sfp6aM-1670145631563)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124142014708.png)\]

基本介绍

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTSxO2nC-1670145631563)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124142500390.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRw8BVSJ-1670145631563)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124143107503.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUBjYYyq-1670145631564)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124143154841.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GCx0tlu-1670145631564)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124143627328.png)\]

熔断策略

慢调用比例

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fCs8Ezp-1670145631564)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124143808780.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nU7ehnMB-1670145631565)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144349309.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YXBCV6Zq-1670145631565)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144807437.png)\]

异常比例

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCnILauB-1670145631565)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144556836.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrVTB1Co-1670145631566)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144750954.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABAmE1hw-1670145631566)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144730555.png)\]

异常数

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bECgNjnV-1670145631566)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124144946948.png)\]

熔断降级实例-慢调用比例

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZ625PWk-1670145631567)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124145152158.png)\]

修改业务类

在MemberController.java 类添加 t3()方法

在这里插入图片描述

配置实现步骤
1.为/t3 增加降级规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWHoEwVI-1670145631567)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124150030222.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qv8Q9n5W-1670145631568)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124150918764.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i6x1Pon6-1670145631568)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124150302816.png)\]

使用postman测试

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRGw64jU-1670145631568)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124150819485.png)\]

熔断降级实例-异常比例

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hnxqRIx3-1670145631569)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124151042317.png)\]

修改业务类

在MemberController.java添加

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-atYswBx9-1670145631569)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124151835040.png)\]

  1. private static int num = 0; // 执行的计数器
  2. @GetMapping("t4")
  3. public Result t4(){
  4. // 设计异常比例达到50% > 20%
  5. if (++num %2 ==0){
  6. // 制造一个异常
  7. System.out.println(3/0);
  8. }
  9. log.info("熔断降级测试[异常比例] 执行t4 线程id={}",Thread.currentThread().getId());
  10. return Result.success("t4()执行...");
  11. }
配置实现步骤

1、为/t4 增加降级规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mufaA51-1670145631569)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124152127379.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlLJ4eav-1670145631570)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124151954283.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-054I2ukx-1670145631570)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124152057859.png)\]

浏览器:http://localhost:10004/t4

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCLfJ42w-1670145631570)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124152443003.png)\]

熔断降级实例-异常数

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-maQRYITY-1670145631573)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124152603687.png)\]

修改业务类

在MemberController.java添加 t5()方法

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJ7OTaV7-1670145631573)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124155805825.png)\]

  1. private static int num = 0; // 执行的计数器
  2. // 设计一个测试案例-满足异常数的阈值,触发限流机制
  3. @GetMapping("t5")
  4. public Result t5() {
  5. // 出现6次异常,这里需要设置大于6,需要留出几次做测试和加入簇点链路
  6. if (++num <= 10) {
  7. System.out.println(3 / 0);
  8. }
  9. log.info("熔断降级测试[异常数] 执行t5 线程id={}", Thread.currentThread().getId());
  10. return Result.success("t5()执行...");
  11. }
配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulo6ADxK-1670145631574)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124155930613.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ou41CkcL-1670145631574)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124160006593.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhUQYKlR-1670145631575)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124160427249.png)\]

Sentinel热点规则

一个问题引出热点key限流

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bhSxlRe4-1670145631575)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124165920451.png)\]

基本介绍

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1TPdCCx-1670145631576)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124170250081.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-07Fjd8J0-1670145631576)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124170437518.png)\]

热点Key限流-实例

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JccshVO-1670145631576)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124170912862.png)\]

修改业务类

在MemberController 添加方法

  1. // 完成对 热点key限流的测试
  2. /**
  3. * 1. @SentinelResource:指定sentinel限流资源
  4. * 2. value = "news" 表示sentinel限流资源 名称,由程序员指定
  5. * 3.blockHandler="newBlockHandler" :当出现限流时,由newBlockHandler方法进行处理
  6. */
  7. @GetMapping("news")
  8. @SentinelResource(value = "news",blockHandler = "newBlockHandler")
  9. public Result queryNews(@RequestParam(value = "id",required = false) String id,
  10. @RequestParam(value = "type",required = false) String type){
  11. // 在实际开发汇总,新闻应该到DB或者缓存获取,这里就模拟一下
  12. log.info("到DB 查询新闻");
  13. return Result.success("返回新闻 id="+id+" " + "新闻 from DB");
  14. }
  15. // 热点key限制/限流异常处理方法
  16. public Result newBlockHandler(String id, String type, BlockException blockException){
  17. return Result.success("查询id="+id+" 新闻 触发热点key限流保护 sorry...");
  18. }
配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wTuHHiq6-1670145631577)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124174719145.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R1fFfWaK-1670145631577)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124174807270.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GuPRGm3s-1670145631578)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124175419225.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUbTttCF-1670145631578)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124173633559.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtH4fFez-1670145631578)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124180218014.png)\]

系统规则

一个问题引出系统规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjR6mAMP-1670145631579)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124180913680.png)\]

一句话:系统规则作用,在系统稳定的前提下,保持系统的吞吐量

基本介绍

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYN1UZzj-1670145631579)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124181425170.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iy2muQzB-1670145631580)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124181606391.png)\]

实例

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6fgSxRE-1670145631580)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124182041194.png)\]

配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqmYOump-1670145631580)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124182128919.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UByrSdlP-1670145631581)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124182156416.png)\]

测试

http://localhost:10004/t1

@SentinelResource

自定义全局限流处理类

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwBLskkx-1670145631581)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124183118733.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MI2868va-1670145631581)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124183156532.png)\]

代码实现

创建全局限流处理类 CustomGlobalBlockHandler.java

  1. package com.hspedu.springcloud.handler;
  2. import com.alibaba.csp.sentinel.slots.block.BlockException;
  3. import com.hspedu.springcloud.entity.Result;
  4. /**
  5. * 1.CustomGlobalBlockHandler 全局限流处理类
  6. * 2.在CustomGlobalBlockHandler类中,可以编写限流处理方法,但是要求方法是static
  7. */
  8. public class CustomGlobalBlockHandler {
  9. public static Result handlerMethod1(BlockException blockException){
  10. return Result.error("400","客户自定义异常/限流处理方法handlerMethod1");
  11. }
  12. public static Result handlerMethod2(BlockException blockException){
  13. return Result.error("400","客户自定义异常/限流处理方法handlerMethod2");
  14. }
  15. }

在MemberController.java 使用全局限流处理类

  1. /**
  2. *value = "t6" 表示 sentinel限流资源的名字
  3. * blockHandlerClass = CustomGlobalBlockHandler.class 全局限流处理类
  4. * blockHandler = "handlerMethod1" 指定使用全局限流处理类的哪个方法,处理信息
  5. */
  6. // 这里我们使用全局限流处理类,显示限流信息
  7. @GetMapping("t6")
  8. @SentinelResource(value = "t6",
  9. blockHandlerClass = CustomGlobalBlockHandler.class,
  10. blockHandler = "handlerMethod1")
  11. public Result t6(){
  12. log.info("执行t6() 线程id={}",Thread.currentThread().getId());
  13. return Result.success("200","t6() 执行OK~~");
  14. }
配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqcLLf31-1670145631582)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124184021203.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMPGyqSR-1670145631582)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124184028413.png)\]

测试

http://localhost:10004/t6

fallback

看一段代码-引出fallback
  1. // 这里我们使用全局限流处理类,显示限流信息
  2. @GetMapping("t6")
  3. @SentinelResource(value = "t6",
  4. blockHandlerClass = CustomGlobalBlockHandler.class,
  5. blockHandler = "handlerMethod1")
  6. public Result t6(){
  7. // 假定:当访问t6资源次数是5的倍数时,就出现java异常
  8. if (++num%5==0){
  9. throw new RuntimeException("num的值异常 num=" +num);
  10. }
  11. log.info("执行t6() 线程id={}",Thread.currentThread().getId());
  12. return Result.success("200","t6() 执行OK~~");
  13. }
基本介绍

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDBEksSW-1670145631582)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124190914414.png)\]

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEUuRvRw-1670145631583)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124190953493.png)\]

代码实现

创建 GustomGlobalFallbackHandler 全局fallback处理类

  1. package com.hspedu.springcloud.handler;
  2. import com.hspedu.springcloud.entity.Result;
  3. /**
  4. * GustomGlobalFallbackHandler 全局fallback处理类
  5. * 在GustomGlobalFallbackHandler 类中,可以编写处理java异常/业务异常方法 static
  6. */
  7. public class GustomGlobalFallbackHandler {
  8. public static Result fallbackHandlerMethod1(Throwable throwable){
  9. return Result.error("402","java异常 信息="+throwable.getMessage());
  10. }
  11. public static Result fallbackHandlerMethod2(Throwable throwable){
  12. return Result.error("403","java异常 信息="+throwable.getMessage());
  13. }
  14. }

在MemberController 类修改

  1. /**
  2. *value = "t6" 表示 sentinel限流资源的名字
  3. * blockHandlerClass = CustomGlobalBlockHandler.class 全局限流处理类
  4. * blockHandler = "handlerMethod1" 指定使用全局限流处理类的哪个方法,处理信息
  5. * allbackClass = GustomGlobalFallbackHandler.class 全局fallback处理
  6. * fallback = "fallbackHandlerMethod1" 指定使用全局fallback处理类的哪个方法来处理
  7. */
  8. // 这里我们使用全局限流处理类,显示限流信息
  9. @GetMapping("t6")
  10. @SentinelResource(value = "t6",
  11. fallbackClass = GustomGlobalFallbackHandler.class,
  12. fallback = "fallbackHandlerMethod1",
  13. blockHandlerClass = CustomGlobalBlockHandler.class,
  14. blockHandler = "handlerMethod1")
  15. public Result t6(){
  16. // 假定:当访问t6资源次数是5的倍数时,就出现java异常
  17. if (++num%5==0){
  18. throw new RuntimeException("num的值异常 num=" +num);
  19. }
  20. log.info("执行t6() 线程id={}",Thread.currentThread().getId());
  21. return Result.success("200","t6() 执行OK~~");
  22. }
测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtY0pw3u-1670145631583)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124200753804.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iu7NL4R9-1670145631584)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124200806731.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0Hs3Miv-1670145631584)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124200847237.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ZVE7FHZ-1670145631584)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124200906729.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ypu3dSDF-1670145631585)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124200916103.png)\]

exceptionsTolgnore

基本介绍

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9h2YvSD-1670145631585)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124201139153.png)\]

应用实例

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nz2sHoaW-1670145631586)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221124201240794.png)\]

exceptionsToIgnore = {RuntimeException.class} :如果t6抛出RuntimeException,就使用系统默认方式处理

  1. /**
  2. *value = "t6" 表示 sentinel限流资源的名字
  3. * blockHandlerClass = CustomGlobalBlockHandler.class 全局限流处理类
  4. * blockHandler = "handlerMethod1" 指定使用全局限流处理类的哪个方法,处理信息
  5. * allbackClass = GustomGlobalFallbackHandler.class 全局fallback处理
  6. * fallback = "fallbackHandlerMethod1" 指定使用全局fallback处理类的哪个方法来处理
  7. * exceptionsToIgnore = {RuntimeException.class} :如果t6抛出RuntimeException,就使用系统默认方式处理
  8. */
  9. // 这里我们使用全局限流处理类,显示限流信息
  10. @GetMapping("t6")
  11. @SentinelResource(value = "t6",
  12. fallbackClass = GustomGlobalFallbackHandler.class,
  13. fallback = "fallbackHandlerMethod1",
  14. blockHandlerClass = CustomGlobalBlockHandler.class,
  15. blockHandler = "handlerMethod1",
  16. exceptionsToIgnore = {
  17. RuntimeException.class})
  18. public Result t6(){
  19. // 假定:当访问t6资源次数是5的倍数时,就出现java异常
  20. if (++num%5==0){
  21. throw new RuntimeException("num的值异常 num=" +num);
  22. }
  23. log.info("执行t6() 线程id={}",Thread.currentThread().getId());
  24. return Result.success("200","t6() 执行OK~~");
  25. }

接入 Sentinel的方式

代码方式(硬编码,侵入性强,不推荐)
注解方式(低侵入性,前面用过,推荐)
@SentinelResource注解

注意:注解方式埋点不支持 private 方法,处理指定异常的方法也不支持 private

OpenFeign+sentinel对远程调用熔断降级

当前微服务基础环境

当前微服务环境架构图

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-phLyDjs9-1670145631586)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125091039650.png)\]

测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZOsxGYd-1670145631586)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125091519512.png)\]

浏览器:http://localhost:81/member/nacos/consumer/get/2 目前是Ribbon+RestTemplate

服务消费者整合Openfeign

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kU43uiNU-1670145631587)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125092242185.png)\]

代码+配置实现步骤

在 member-service-nacos-consumer-80 引入依赖

  1. <!-- 引入openfeign starter 即场景启动器starter-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

添加OpenFeign调用接口 MemberOpenFeignService

  1. @FeignClient(value = "member-service-nacos-provider")
  2. public interface MemberOpenFeignService {
  3. @GetMapping("member/get/{id}")
  4. public Result getMemberById(@PathVariable("id") Long id);
  5. }

在 MemberNacosConsumerController 添加OpenFeign 远程调用接口

  1. // 装配 MemberOpenFeignService
  2. @Resource
  3. private MemberOpenFeignService memberOpenFeignService;
  4. // 编写方法通过OpenFeign实现远程调用
  5. @GetMapping("member/openfeign/consumer/get/{id}")
  6. public Result getMemberOpenFeignById(@PathVariable("id") Long id){
  7. // 这里使用OpenFeign接口方式调用
  8. return memberOpenFeignService.getMemberById(id);
  9. }

在 MemberNacosConsumerApplication80 启用openfeign

  1. @SpringBootApplication
  2. @EnableDiscoveryClient // 引入的是启动nacos发现注解
  3. @EnableFeignClients // 启用openFeign
  4. public class MemberNacosConsumerApplication80 {
  5. public static void main(String[] args) {
  6. SpringApplication.run(MemberNacosConsumerApplication80.class,args);
  7. }
  8. }
测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pHweJMjq-1670145631587)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125093617552.png)\]

浏览器:http://localhost:81/member/openfeign/consumer/get/2

服务消费者整合Sentinel

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-En4KyzQC-1670145631587)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125094226810.png)\]

代码+配置实现步骤

在 member-service-nacos-consumer-80 引入依赖

  1. <!-- 引入alibaba-sentinel starter 使用版本仲裁-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5. </dependency>

添加 member-service-nacos-consumer-80 的application.yml 依赖

  1. server:
  2. port: 81
  3. spring:
  4. application:
  5. name: member-service-nacos-consumer-80
  6. #配置nacos
  7. cloud:
  8. nacos:
  9. discovery:
  10. server-addr: localhost:8848 #nacos server的地址
  11. sentinel:
  12. transport:
  13. dashboard: localhost:8080 # 指定sentinel控制台地址
  14. port: 8719
  15. #配置暴露所有的监控点
  16. management:
  17. endpoints:
  18. web:
  19. exposure:
  20. include: '*'
测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QIIu1JJh-1670145631588)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125095230681.png)\]

浏览器:http://localhost:81/member/openfeign/consumer/get/2

OpenFeign+sentinel对对远程调用熔断降级

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQKYZVpu-1670145631588)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125100600843.png)\]

代码+配置实现步骤

在 member-service-nacos-consumer-80 添加实现openfeign接口类,进行熔断降级

  1. package com.hspedu.springcloud.service;
  2. import com.hspedu.springcloud.entity.Result;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class MembarFeignFallbackService implements MemberOpenFeignService{
  6. @Override
  7. public Result getMemberById(Long id) {
  8. return Result.error("500","被调用服务异常,熔断降级,快速返回结果,防止请求线程堆积");
  9. }
  10. }

在 MemberOpenFeignService 接口注解加上属性

  1. // fallback 加上熔断降级返回的类
  2. @FeignClient(value = "member-service-nacos-provider",fallback = MembarFeignFallbackService.class)
  3. public interface MemberOpenFeignService {

添加application.yml 依赖

  1. # openfeign和sentinel整合,必须配置
  2. feign:
  3. sentinel:
  4. enabled: true
测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDnVtUrZ-1670145631589)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125101813832.png)\]

浏览器 http://localhost:81/member/openfeign/consumer/get/2

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oP3Su199-1670145631589)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125105859857.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNOq4wEN-1670145631590)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125110104084.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiO2UrXl-1670145631590)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125110229626.png)\]

规则持久化

规则没有持久化的问题

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfr0HuPo-1670145631590)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125110559287.png)\]

规则持久化方案

阿里云Ahas[最方便/付费]

在Nacos Server 配置规则,完成持久化-官方推荐

datasource 支持 nacos,redis,apollo,zk,file

Nacos Server 配置中心-规则持久化实例

工作原理示意图

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaWt2n5y-1670145631590)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125111714436.png)\]

需求分析/图解

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0F2Syvfb-1670145631591)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125111822186.png)\]

代码+配置实现步骤

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDMwNe9m-1670145631591)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125112414988.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ne9UA7KY-1670145631592)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125113758229.png)\]

  1. [
  2. {
  3. "resource": "/member/openfeign/consumer/get/1",
  4. "limitApp": "default",
  5. "grade": 1,
  6. "count": 1,
  7. "strategy": 0,
  8. "controlBehavior": 0,
  9. "clusterMode": false
  10. }
  11. ]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1eOcexb-1670145631592)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125112615954.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xYmNwNQ-1670145631593)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125112636088.png)\]

修改 member-service-nacos-consumer-80
  1. <!-- 引入sentinel 和 nacos持久化整合依赖 使用版本仲裁-->
  2. <dependency>
  3. <groupId>com.alibaba.csp</groupId>
  4. <artifactId>sentinel-datasource-nacos</artifactId>
  5. </dependency>
修改 member-service-nacos-consumer-80 的yam文件

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXh9FUIb-1670145631593)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125113026933.png)\]

  1. spring:
  2. application:
  3. name: member-service-nacos-consumer-80
  4. #配置nacos
  5. cloud:
  6. nacos:
  7. discovery:
  8. server-addr: localhost:8848 #nacos server的地址
  9. sentinel:
  10. transport:
  11. dashboard: localhost:8080 # 指定sentinel控制台地址
  12. port: 8719
  13. datasource:
  14. ds1:
  15. # 流控规则配置是从nacos server配置中心获取
  16. nacos:
  17. server-addr: localhost:8848 # 指定nacos server配置中心地址
  18. dataId: member-service-nacos-consumer-80 # 指定nacos server配置中心dataId
  19. groupId: DEFAULT_GROUP # 指定nacos server配置中心 哪个Group
  20. data-type: json # 指定nacos server配置中心 流控规则的数据类型
  21. rule-type: flow # 规则类型:流控规则 可以是【flow -流控规则】【degrade -降级规则】【param-flow -热点规则】【system -系统规则】
测试

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxduiVeZ-1670145631593)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125115219711.png)\]

浏览器:http://localhost:81/member/openfeign/consumer/get/1

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUMkJDuf-1670145631594)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125115236065.png)\]

注意事项和细节

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSlxMRgd-1670145631594)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125115343753-16693484694561.png)\]

其他类型规则

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-psyX5akr-1670145631595)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125115506122.png)\]

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWhzcr0O-1670145631595)(E:\\Java资料\\韩顺平Java\\资料\\SpringCloud\\笔记\\10.SpringCloud Alibaba Sentinel.assets\\image-20221125115535723.png)\]

rult-type 配置

可以是【flow -流控规则】【degrade -降级规则】【param-flow -热点规则】【system -系统规则】

3.其他规则-配置文档

https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读