小工具      在线工具  汉语词典  css  js  c++  java

Springboot集成Sentinel实战

Java 额外说明

收录于:97天前

1.哨兵简介

官方介绍: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D 

随着微服务越来越流行,服务与服务之间的稳定性变得越来越重要。 Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保障服务的稳定性。

哨兵具有以下特点:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完整的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态系统:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完整的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

2. Sentinel控制台介绍、安装和使用

1 简介

Sentinel提供了一个轻量级的开源控制台,提供机器发现和健康管理、监控(单机和集群)、规则管理和推送功能。

Sentinel 控制台包括以下功能:

注意:Sentinel 控制台目前仅支持单机部署。Sentinel 控制台项目提供 Sentinel 功能全集示例,不作为开箱即用的生产环境控制台,若希望在生产环境使用请根据文档自行进行定制和改造。

2.下载
下载地址:https://github.com/alibaba/Sentinel/releases

3.启动命令

启动 Sentinel 控制台需要 JDK 版本 1.8 及更高版本。

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

4. 界面显示

3.springBoot集成Sentinel

pom.xml

   <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>

应用程序属性

#这里的 spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,\
#该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,\
#  会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
spring.application.name=MySentinel
spring.cloud.sentinel.eager= true
spring.cloud.sentinel.transport.port= 8720
spring.cloud.sentinel.transport.dashboard= 127.0.0.1:8080
spring.cloud.sentinel.transport.heartbeat-interval-ms= 500

@SentinelResource 注解用来标识资源是否被限流、降级。上述例子上该注解的属性 sayHello 表示资源名。@SentinelResource 还提供了其它额外的属性如 blockHandlerblockHandlerClassfallback 用于表示限流或降级的操作(注意有方法签名要求),更多内容可以参考 Sentinel注释支持文档。若不配置 blockHandlerfallback 等函数,则被流控降级时方法会直接抛出对应的 BlockException;若方法未定义 throws BlockException 则会被 JVM 包装一层 UndeclaredThrowableException

添加测试控制器

package com.robinbootweb.dmo.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @auther: TF12778
 * @date: 2021/3/11 13:35
 * @description:
 */
@RestController
@RequestMapping("/sentinel")
public class SentinelController {

    /**
     * @auther: TF12778
     * @date: 2021/3/11 13:32
     * @description: Sentine
     * https://juejin.cn/post/6844903833856917517
     */
    @GetMapping("/hello")
    @SentinelResource(value = "hello", fallback = "helloError")
    public String hello(String name) {
        return "hello," + name;
    }

    @GetMapping(value = "/mye")
    @SentinelResource("mye")
    public String mye() {
        if (true) {
            throw new RuntimeException("mye");
        }
        return "mye Sentinel";
    }

    @GetMapping(value = "/myrate")
    @SentinelResource("myrate")
    public String myrate() {
        return "myrate Sentinel";
    }

}

4.配置流控规则

资源 myrate 限制为每秒一个请求。如果超过限制,就会直接失败。

流控规则添加成功界面

5. 流量控制测试

每秒1个请求成功接口

1秒内多次请求失败接口

控制台记录的请求结果:

这里可以看到,myrate 请求因过大而被拒绝一次。

参考:https://juejin.cn/post/6844903833856917517#heading-4

https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0#2-%E5%90%AF%E5%8A%A8%E6% 8E%A7%E5%88%B6%E5%8F%B0

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel#%E9%85%8D%E7%BD%AE%E6%8E%A7%E5%88%B6%E5%8F%B0 %E4%BF%A1%E6%81%AF

. . .

相关推荐

额外说明

template根问题和作用域插槽问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、template根问题? 二、作用域插槽 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、template根问题? 为了让组件能够正常的生成一个vue实例,那么这个

额外说明

Midjourney|文心一格prompt教程[技巧篇]:生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学

Midjourney|文心一格prompt教程[技巧篇]:生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学 1.技巧一:临摹 我认为学习图片类的 prompt,跟学习画画是类似的,最好的学习方法不是直接用模板。 而是拿

额外说明

【100个 Unity实用技能】| Unity将本地图片文件显示到Image组件中 通用方法整理

Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方

额外说明

【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径

-前言 -原题样例:二叉树的所有路径 -C#方法:递归 -Java 方法:深度优先搜索 -总结 -前言 - 算法题 - - 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程- - 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解

额外说明

js数组对象转对象

将数组对象的数据转换为普通对象键值对key:value的形式 let arr = [ { id:'1',employeeNo:'110',name:'张三'}, { id:'2',employeeNo:'111',name:'李四'},

额外说明

数据结构笔记(一)绪论

-前言 本人是根据bi站王卓老师视频学习并且做了相关笔记希望可以帮助到大家 -个人主页:尘觉主页 -个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力- 在csdn获奖荣誉: -csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 

额外说明

Gradle和Maven的详细讲解和两者之间的区别

Gradle 详细介绍 Gradle 是一种基于 Groovy 语言的构建自动化工具,用于构建、测试和部署项目。它使用声明式的脚本来定义构建过程,允许开发者灵活地配置项目构建。Gradle 使用一种被称为 Groovy DSL(领域特定语言)的语法,使构

额外说明

Windows系统丢失snmpapi.dll文件出现错误问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个snmpapi.dll文件(

额外说明

【基础设施设计】深入解析仿12306系统公共组件设计

仿12306系统学习 学习路线 12306铁路订票系统的研究总体分为组件库开发、业务整理和业务系统开发三个部分。 组件库开发 组件库的输出来自于常用功能的封装,避免了不同项目之间的代码复制。当然,如果这种复制代码的方式出现问题,所有项目都需要同时修改,从

额外说明

[MySQL]解决找不到安装的服务名的问题

切换到MySQL安装目录以管理的身份在命令提示符下输入mysqld -install来安装服务 服务没有mysql可能是因为长时间未使用导致服务自动关闭,需要在管理员状态下运行cmd窗口并切换至mysql/bin的文件夹,或者通过netstartmysq

ads via 小工具