SpringCloud-Sentinel

news2024/11/20 2:35:37

一、介绍

(1)提供界面配置配置服务限流、服务降级、服务熔断
(2)@SentinelResource的blockHandler只处理后台配置的异常,运行时异常fallBack处理,且资源名为value时才生效,走兜底方法

二、安装并启动sentinel

(1)官网
(2)运行java -jar sentinel-dashboard-1.8.6.jar
(3)访问http://localhost:8080/
在这里插入图片描述
注:sentinel是懒加载的,访问接口后才会显示

三、搭建项目

(1)编写pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo20220821</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-sentinel-service</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.wsh.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

(2)编写application.yml

server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719


management:
  endpoints:
    web:
      exposure:
        include: "*"

(3)编写启动类

package com.wsh.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @ClassName SentinelService8401
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@SpringBootApplication
@EnableDiscoveryClient
public class SentinelService8401 {
    public static void main(String[] args) {
        SpringApplication.run(SentinelService8401.class, args);
    }
}

(4)编写Controller

package com.wsh.springcloud.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName TestController
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@RestController
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "test";
    }
}

四、服务限流

在这里插入图片描述

(1)打开界面
在这里插入图片描述
(2)阈值
QPS:每秒请求数
并发线程数:处理请求的线程数
在这里插入图片描述
(3)关联
在这里插入图片描述

/test炸了,/test1也炸

在这里插入图片描述

(4)预热,阈值先从阈值/3开始,在预热时长(单位:秒)内逐渐上升
在这里插入图片描述
(5)排队等待,阈值类型必须设置为QPS,超出阈值的请求将会排队,等待的超时时间设置为20秒
在这里插入图片描述

五、服务降级

(1)满足条件后,服务在规定时间内熔断
(2)慢调用比例
在这里插入图片描述
(3)异常比例
在这里插入图片描述
(4)异常数
在这里插入图片描述

六、热点参数限流

(1)要用@SentinelResource定义资源名和兜底方法

    @GetMapping("/test2")
    @SentinelResource(value = "test2", blockHandler = "test2_solve")
    public String test2(@RequestParam("name") String name) {
        log.info("test2");
        return "test2";
    }
    public String test2_solve(String name, BlockException blockException){
        return "block";
    }

(2)
在这里插入图片描述
(3)定义规则时指定参数的值
在这里插入图片描述

七、兜底方法编写方式优化

(1)

    @GetMapping("/test3")
    @SentinelResource(value = "test3",  blockHandlerClass = BlockHandler.class, blockHandler = "test3_solve")
    public String test3() {
        log.info("test3");
        return "test3";
    }

(2)编写BlockHandler类

package com.wsh.springcloud.handler;

import com.alibaba.csp.sentinel.slots.block.BlockException;

/**
 * @ClassName BlockHandler
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
public class BlockHandler {

    public static String test3_solve(BlockException blockException){
        return "block";
    }
}

(3)
在这里插入图片描述

八、配置fallback、blockHandler

(1)exceptionsToIgnore 用于忽略异常,不走fallback

    @GetMapping("/test3")
    @SentinelResource(value = "test3", blockHandlerClass = BlockHandler.class, blockHandler = "test3_solve",
    fallbackClass = FallBackHandler.class, fallback = "test3_solve1",
    exceptionsToIgnore = NullPointerException.class)
    public String test3(@RequestParam("name") String name) {
        if (name.equals("wsh")){
            throw new IllegalArgumentException();
        }
        return "test3";
    }

(2)

public class BlockHandler {

    public static String test3_solve(String name, BlockException blockException){
        return "block";
    }
}
public class FallBackHandler {

    public static String test3_solve1(String name, Throwable throwable){
        return "block1";
    }
}

九、配置openFeign

(1)编写pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo20220821</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-consumer-order84</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.wsh.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

(2)编写application.yml

server:
  port: 84

spring:
  application:
    name: cloudalibaba-consumer-order
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719

management:
  endpoints:
    web:
      exposure:
        include: "*"

server-url: http://cloudalibaba-provider-payment

feign:
  sentinel:
    enabled: true

(3)编写启动类

package com.wsh.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @ClassName ConsumerOrder84
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class ConsumerOrder84 {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerOrder84.class, args);
    }
}

(4)编写PaymentService

package com.wsh.springcloud.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @ClassName PaymentService
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@FeignClient(value = "cloudalibaba-provider-payment", fallback = PaymentServiceHandler.class)
public interface PaymentService {

    @GetMapping("/payment/test")
    public String test();
}

(5)编写fallback类

package com.wsh.springcloud.service;

import org.springframework.stereotype.Component;

/**
 * @ClassName PaymentServiceHandler
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@Component
public class PaymentServiceHandler implements PaymentService{
    @Override
    public String test() {
        return "fallback";
    }
}

(6)编写Controller

package com.wsh.springcloud.controller;

import com.wsh.springcloud.service.PaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName TestController
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/19
 * @Version V1.0
 **/
@RestController
public class TestController {

    @Autowired
    private PaymentService paymentService;

    @GetMapping("/consumer/test")
    public String test(){
        return paymentService.test();
    }
}

(7)编写服务提供者Controller

package com.wsh.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName TestController
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/18
 * @Version V1.0
 **/
@RestController
public class TestController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/payment/test")
    public String test(){
        int i = 1 / 0;
        return "test: " + port;
    }
}

(8)运行
在这里插入图片描述

十、配置持久化

(1)将规则持久化到nacos保存,只能先在nacos里编写好才有效
(2)pom.xml增加依赖

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

(3)修改application.yml

    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
      datasource:
        dsl:
          nacos:
            server-addr: localhost:8848
            dataId: cloudalibaba-sentinel-service
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow

(4)nacos里创建配置
在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析:密度图

目前拥有的数据如图&#xff0c;三列分别对应瑕疵种类&#xff0c;对应的置信 度&#xff0c;x方向坐标。 现在想要做的事是观看瑕疵种类和置信度之间的关系。 要显示数据分布的集中程度&#xff0c;可以使用以下几种常见的图形来观察&#xff1a; 1、箱线图&#xff08;Box P…

【工具】电脑网络连接正常,但是有些页面无法登录,如何解决?

目录 0.环境 1.背景 2.具体操作 0.环境 windows 11 64位 1.背景 我们公司的大楼无法进移动联通这种网络的线&#xff0c;所以网络用的是小厂的&#xff0c;有些小厂为了提高网络速度&#xff0c;会屏蔽一些网站&#xff0c;这就导致在工作中有些网站直接通过WIFI连接是无法访…

头歌平台——基于结构体的学生信息管理系统

第1关&#xff1a;学生信息管理系统 任务描述 本关任务&#xff1a;编写一个基于结构体得学生成绩信息管理系统。主要功能如下&#xff1a; 1. 用结构体存放所有数据。 2. 每个功能都用函数实现。 3. 输入10个学生的学号和三门课程的成绩。 4. 计算每个学生的总分。 5. 按总分…

头歌平台——C语言之数学运算强化练习题

第1关&#xff1a;逐一挑出来 任务描述 本关需要完成一个输出某个三位数各个位上的数字的小程序。 相关知识 算数运算符 %是取模运算符&#xff0c;获得整除后的余数。 /是通过分子除以分母&#xff0c;获得整除后的整数部分。 floor floor()是返回一个浮点型的整数部分…

腾讯云服务器带宽下载速度表(附上行带宽计算方法)

腾讯云服务器公网带宽下载速度计算&#xff0c;1M公网带宽下载速度是128KB/秒&#xff0c;5M带宽下载速度是512KB/s&#xff0c;腾讯云10M带宽下载速度是1.25M/秒&#xff0c;腾讯云百科txybk.com来详细说下腾讯云服务器不同公网带宽实际下载速度以及对应的上传速度对照表&…

MySQL官方文档如何查看,MySQL中文文档

这里写自定义目录标题 MySQL官方文档如何查看MySQL中文文档 MySQL官方文档如何查看 MySQL官网地址&#xff1a;https://dev.mysql.com/doc/ 比如这里我要找InnoDB架构 MySQL中文文档 MySQL 5.1中文文档地址&#xff1a;https://www.mysqlzh.com/

头歌平台——C语言之链表练习题

第1关&#xff1a;建单向链表 任务描述 本关需要你建立一个带头结点的单向链表。 相关知识 什么是链表&#xff1f;链表和二叉树是C语言数据结构的基础和核心。 链表有多种形式&#xff0c;它可以是单链接的或者双链接的&#xff0c;可以是已排序的或未排序的&#xff0c;…

C# CodeFormer 图像(人脸面部)修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {p…

AArch64 TrustZone

概述 本文我们介绍了 TrustZone 技术。通过CPU内置的硬件强制隔离&#xff0c;TrustZone 提供了一种高效的全系统安全设计。 我们介绍了如下功能&#xff1a;将 TrustZone 技术添加到处理器架构中&#xff0c;内存系统对于 TrustZone 的支持以及典型的软件架构。我们还介绍了…

京东API接口助力京东ToB和ToC全面发展

目前京东企业业务已建成7大智能化采购平台&#xff0c;3大场景化产品&#xff0c;4条企业专属供应链体系&#xff0c;发布API接口200余个&#xff0c;在ToB场景的应用能力方面&#xff0c;京东企业业务在2019年还推出三款重量级的技术产品——采购ERP、神算子数据平台和采购大脑…

插入排序 算法

从第二个开始&#xff0c;从后面往前找&#xff0c;如果比其小&#xff0c;就交换&#xff0c;else 就终止 for i 1 i <n i for j i j > 0 (到第二个) j-- if < swap 下面给出源码 //对插入排序来说&#xff0c;直接从第二个元素开始template<ty…

2024北京智能科技展(世亚智博会)推动我国智能科技产业快速发展

2024北京国际智能科技展览会&#xff08;世亚智博会&#xff09; 2024 Shanghai Smart Product Expo 时间:2024年6月28-30日 地点:北京亦创国际会展中心 主题展:北京人工智能展览会|北京软件博览会 随着科技的飞速发展&#xff0c;中国正逐渐成为全球科技领域的一面旗帜。在…

官宣!软考机考模拟练习平台于10月16日至11月3日开放

软考机考模拟练习平台已经在官网公布了&#xff0c;已经报名的考生可以按照以下操作指南开始练习&#xff1a; 1、登陆网上报名平台地址&#xff0c;点击【模拟练习平台】 全国计算机技术与软件专业技术资格(水平)考试网上报名平台 2、登录 温馨提示&#xff1a;实名认证通过…

嵌入式学习笔记(59)内存管理之结构体

数据结构&#xff1a;是一门研究数据在内存中如何分布的学问。 1.5.1.最简单的数据结构&#xff1a;数组 数组的特点&#xff1a;类型相同、意义相关 数组的优势&#xff1a;数组比较简单&#xff0c;访问使用下标&#xff0c;可以随机访问&#xff08;就是可以通过下标随机…

使用crul库和R语言的下载器程序

以下是一个使用crul库和R语言的下载器程序&#xff0c;用于从下载音频。此程序使用了jshk.com.cn/get_proxy的代码。 // 导入必要的库 import ("fmt""github.com/cjlapa/crul""io""net/http""net/url""os" )// 主…

视频文件打不开?盘点4个有效方法!

“好奇怪呀&#xff0c;我将相机里的部分视频导入电脑了&#xff0c;但是这些视频都无法打开。视频文件打不开是为什么呢&#xff1f;应该怎么做才能正常播放视频呀&#xff1f;” 随着数字化媒体的普及&#xff0c;视频文件在我们的生活中扮演着越来越重要的角色。然而&#x…

一文搞定专属码的设计与开发

作者 | 木白 导读 本文将为您介绍百度码的译码技术&#xff0c;包括关键的译码流程和关键的优化手段。百度码目前已经在高考等活动中进行应用&#xff0c;在未来的发展中&#xff0c;百度码的译码技术将继续升级和完善&#xff0c;以满足更多场景的需求。百度码的译码技术将在现…

【C++】C++智能指针

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C异…

IDEA设置标签多行展示

一、打开IDEA工具 二、IDEA页面左上角File里边settings设置 三、找到Editor --》 General --》 Editor tabs 四、取消单行展示选项 五、设置最多页签个数 参考&#xff1a;IDEA设置标签多行展示-腾讯云开发者社区-腾讯云

漏洞复现--用友NC-Cloud全版本任意文件上传/RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…