10.SpringCloud Alibaba Sentinel

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

import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

@Component
public class CustomUrlCleaner implements UrlCleaner {

    @Override
    public String clean(String originUrl) { // 资源清理 /member/get/1
        /**
         * public static boolean isBlank(String str) {
         *         int strLen;
         *         if (str == null || (strLen = str.length()) == 0) {
         *             return true;
         *         }
         *         for (int i = 0; i < strLen; i++) {
         *             if ((Character.isWhitespace(str.charAt(i)) == false)) {
         *                 return false;
         *             }
         *         }
         *         return true;
         *     }
         */
        // isBlank就是判断 originUrl!=null && originUrl 有长度 && originUrl!=""
        if (StringUtils.isBlank(originUrl)){
            return originUrl;
        }
        // 如果originUrl是以/member/get开头,进行处理
        if (originUrl.startsWith("/member/get")){
            // 解读
            // 1.如果请求的接口是/member/get 开头的,比如 /member/get/1 或/member/get/10
            // 2.给sentinel 返回资源名为/member/get/*
            // 3.在sentinel 对 /member/get/* 添加流控规则即可
            return "/member/get/*";
        }
        return originUrl;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

private static int num = 0; // 执行的计数器

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

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)]

private static int num = 0; // 执行的计数器

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 添加方法

// 完成对 热点key限流的测试

/**
 * 1. @SentinelResource:指定sentinel限流资源
 * 2. value = "news" 表示sentinel限流资源 名称,由程序员指定
 * 3.blockHandler="newBlockHandler" :当出现限流时,由newBlockHandler方法进行处理
 */
@GetMapping("news")
@SentinelResource(value = "news",blockHandler = "newBlockHandler")
public Result queryNews(@RequestParam(value = "id",required = false) String id,
                        @RequestParam(value = "type",required = false) String type){
    // 在实际开发汇总,新闻应该到DB或者缓存获取,这里就模拟一下
    log.info("到DB 查询新闻");
    return Result.success("返回新闻 id="+id+" " + "新闻 from DB");
}

// 热点key限制/限流异常处理方法
public Result newBlockHandler(String id, String type, BlockException blockException){
    return Result.success("查询id="+id+" 新闻 触发热点key限流保护 sorry...");
}
配置实现步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

package com.hspedu.springcloud.handler;

import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.hspedu.springcloud.entity.Result;

/**
 * 1.CustomGlobalBlockHandler 全局限流处理类
 * 2.在CustomGlobalBlockHandler类中,可以编写限流处理方法,但是要求方法是static
 */
public class CustomGlobalBlockHandler {

    public static Result handlerMethod1(BlockException blockException){
        return Result.error("400","客户自定义异常/限流处理方法handlerMethod1");
    }

    public static Result handlerMethod2(BlockException blockException){
        return Result.error("400","客户自定义异常/限流处理方法handlerMethod2");
    }
}

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
// 这里我们使用全局限流处理类,显示限流信息
@GetMapping("t6")
@SentinelResource(value = "t6",
        blockHandlerClass = CustomGlobalBlockHandler.class,
        blockHandler = "handlerMethod1")
public Result t6(){

    // 假定:当访问t6资源次数是5的倍数时,就出现java异常
    if (++num%5==0){
        throw new RuntimeException("num的值异常 num=" +num);
    }

    log.info("执行t6() 线程id={}",Thread.currentThread().getId());
    return Result.success("200","t6() 执行OK~~");
}
基本介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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处理类

package com.hspedu.springcloud.handler;

import com.hspedu.springcloud.entity.Result;

/**
 * GustomGlobalFallbackHandler 全局fallback处理类
 * 在GustomGlobalFallbackHandler 类中,可以编写处理java异常/业务异常方法 static
 */
public class GustomGlobalFallbackHandler {

    public static Result fallbackHandlerMethod1(Throwable throwable){
        return Result.error("402","java异常 信息="+throwable.getMessage());
    }

    public static Result fallbackHandlerMethod2(Throwable throwable){
        return Result.error("403","java异常 信息="+throwable.getMessage());
    }
}

在MemberController 类修改

/**
 *value = "t6" 表示 sentinel限流资源的名字
 * blockHandlerClass = CustomGlobalBlockHandler.class 全局限流处理类
 * blockHandler = "handlerMethod1" 指定使用全局限流处理类的哪个方法,处理信息
 * allbackClass = GustomGlobalFallbackHandler.class 全局fallback处理
 * fallback = "fallbackHandlerMethod1" 指定使用全局fallback处理类的哪个方法来处理
 */
// 这里我们使用全局限流处理类,显示限流信息
@GetMapping("t6")
@SentinelResource(value = "t6",
        fallbackClass = GustomGlobalFallbackHandler.class,
        fallback = "fallbackHandlerMethod1",
        blockHandlerClass = CustomGlobalBlockHandler.class,
        blockHandler = "handlerMethod1")
public Result t6(){

    // 假定:当访问t6资源次数是5的倍数时,就出现java异常
    if (++num%5==0){
        throw new RuntimeException("num的值异常 num=" +num);
    }

    log.info("执行t6() 线程id={}",Thread.currentThread().getId());
    return Result.success("200","t6() 执行OK~~");
}
测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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,就使用系统默认方式处理

/**
 *value = "t6" 表示 sentinel限流资源的名字
 * blockHandlerClass = CustomGlobalBlockHandler.class 全局限流处理类
 * blockHandler = "handlerMethod1" 指定使用全局限流处理类的哪个方法,处理信息
 * allbackClass = GustomGlobalFallbackHandler.class 全局fallback处理
 * fallback = "fallbackHandlerMethod1" 指定使用全局fallback处理类的哪个方法来处理
 * exceptionsToIgnore = {RuntimeException.class} :如果t6抛出RuntimeException,就使用系统默认方式处理
 */
// 这里我们使用全局限流处理类,显示限流信息
@GetMapping("t6")
@SentinelResource(value = "t6",
        fallbackClass = GustomGlobalFallbackHandler.class,
        fallback = "fallbackHandlerMethod1",
        blockHandlerClass = CustomGlobalBlockHandler.class,
        blockHandler = "handlerMethod1",
        exceptionsToIgnore = {RuntimeException.class})
public Result t6(){

    // 假定:当访问t6资源次数是5的倍数时,就出现java异常
    if (++num%5==0){
        throw new RuntimeException("num的值异常 num=" +num);
    }

    log.info("执行t6() 线程id={}",Thread.currentThread().getId());
    return Result.success("200","t6() 执行OK~~");
}

接入 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 引入依赖

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

添加OpenFeign调用接口 MemberOpenFeignService

@FeignClient(value = "member-service-nacos-provider")
public interface MemberOpenFeignService {

    @GetMapping("member/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id);

}

在 MemberNacosConsumerController 添加OpenFeign 远程调用接口

// 装配 MemberOpenFeignService
@Resource
private MemberOpenFeignService memberOpenFeignService;

// 编写方法通过OpenFeign实现远程调用
@GetMapping("member/openfeign/consumer/get/{id}")
public Result getMemberOpenFeignById(@PathVariable("id") Long id){
    // 这里使用OpenFeign接口方式调用
    return memberOpenFeignService.getMemberById(id);
}

在 MemberNacosConsumerApplication80 启用openfeign

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 引入依赖

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

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

server:
  port: 81

spring:
  application:
    name: member-service-nacos-consumer-80
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server的地址
    sentinel:
      transport:
        dashboard: localhost:8080 # 指定sentinel控制台地址
        port: 8719

#配置暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        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接口类,进行熔断降级

package com.hspedu.springcloud.service;

import com.hspedu.springcloud.entity.Result;
import org.springframework.stereotype.Component;

@Component
public class MembarFeignFallbackService implements MemberOpenFeignService{

    @Override
    public Result getMemberById(Long id) {
        return Result.error("500","被调用服务异常,熔断降级,快速返回结果,防止请求线程堆积");
    }
}

在 MemberOpenFeignService 接口注解加上属性

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

添加application.yml 依赖

# openfeign和sentinel整合,必须配置
feign:
  sentinel:
    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)]

[
    {
        "resource": "/member/openfeign/consumer/get/1",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
<!--        引入sentinel 和 nacos持久化整合依赖 使用版本仲裁-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
修改 member-service-nacos-consumer-80 的yam文件

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

spring:
  application:
    name: member-service-nacos-consumer-80
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server的地址
    sentinel:
      transport:
        dashboard: localhost:8080 # 指定sentinel控制台地址
        port: 8719
      datasource:
        ds1:
          # 流控规则配置是从nacos server配置中心获取
          nacos:
            server-addr: localhost:8848 # 指定nacos server配置中心地址
            dataId: member-service-nacos-consumer-80 # 指定nacos server配置中心dataId
            groupId: DEFAULT_GROUP # 指定nacos server配置中心 哪个Group
            data-type: json # 指定nacos server配置中心 流控规则的数据类型
            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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值