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

Springboot集成Sentinel实战

Java 额外说明

收录于:45天前

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

. . .

相关推荐

额外说明

《PostgreSQL开发指南》第25部分查看

《PostgreSQL 开发指南》专栏目录 第 01 篇 课程介绍 第 02 篇 PostgreSQL 简介 第 03 篇 PostgreSQL 安装 第 04 篇 角色与用户 第 05 篇 数据库与模式 第 06 篇 管理数据表 第 07 篇 管理表空

额外说明

APICloud(十一):版本更新

APICloud官网对于版本更新这个模块说的很清楚,很全面,也很好理解,链接如下: http://docs.apicloud.com/Dev-Guide/version_update   我这里主要是记录一下我在用的过程中碰到的一些问题以及处理情况。  

额外说明

算法精炼——希尔排序(12.9)

希尔排序 之前我们学习过插入排序,是从头开始,依次进行排序和换位 希尔排序的原理就是通过分隔来比较大小,每过一次循环,将会将分隔数/2变化, 模板:使用两个for循环和一个while循环,时间复杂度是:o(nlogn)~o(n2)之间,优于冒泡排序

额外说明

NLP专栏详细版介绍:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏链接:NLP领域知识+项目+码源+方案设计 订阅本专栏你能获得什么? 前人栽树后人乘凉,本专栏提供资料:数据增强、智能

额外说明

Ubuntu20.04服务器使用uwsgi部署Django时报错no internal routing support, rebuild with pcre support

pip uninstall uwsgi sudo apt-get install libpcre3 libpcre3-dev pip install uwsgi --no-cache-dir pip install uwsgi 要加上–no-cac

额外说明

彻底理解数据库ER建模中的扇子陷阱与裂口陷阱:追根到底

目录 写在最前 关于两类陷阱的困惑 什么是扇子陷阱 什么是裂口陷阱 扇子陷阱与裂口陷阱的联系 扇子陷阱与裂口陷阱的正确性 写在最后 写在最前 在课堂上,我们学习了扇子陷阱与裂口陷阱这两类建模陷阱。显然,“扇子”和“裂口”都是很形象的比方,关于这两类陷阱,

额外说明

华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏

文章目录 前言 一、云服务器相对传统服务器有什么优势 1.1、可伸缩性(Scalability) 1.2、灵活性(Flexibility) 1.3、高可用性(High Availability) 1.4、备份和恢复(Backup and Recovery

额外说明

neutron 给虚机分配keepalived vip

目的: 需要要使用keepalived做高可用,给虚机分配vip使用 创建vip port #neutron port-create { {NETWORK_NAME}} --name test-vip 放行虚拟机端口对应的allowed-addr

额外说明

Angular开发(六)-关于组件之间的数据交互

在angular组件中数据交互主要有下面几种 1、父组件通过属性绑定到子组件,子组件通过事件传递参数到父组件 2、父组件通过局部变量获取子组件的引用 3、父组件使用@ViewChild获取子组件的引用 4、两个不相关联的组件使用中间人模式交互 5、终极大

额外说明

BigCommerce vs WooCommerce –哪个更好? (比较)

Do you want to 创建网上商店? Are you confused about whether to use BigCommerce or WooCommerce? 您要创建网上商店吗? 您是否对使用BigCommerce或WooCommer

ads via 小工具