首页 > 其他分享 >springBoot集成Spring Cloud Alibaba Sentinel

springBoot集成Spring Cloud Alibaba Sentinel

时间:2024-07-01 13:00:20浏览次数:20  
标签:springBoot Spring Alibaba msg 限流 规则 Sentinel public sentinel

一、背景介绍:

Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub

二、Sentinel 介绍

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

Sentinel 具有以下特征:

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。

  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

  • Sentinel 基本概念
    资源
    资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

    只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

    规则
    围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

Sentinel主要特性:

三、如何下载和启动

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

这里可以下载最新的1.8.8版本

如何启动sentinel:在jar目录输入如下指令

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

http://localhost:8080/ 看看,输入默认的用户名和密码:都是sentinel

四、springboot应用如何集成 

pom.xml文件加入如下依赖:

		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
			<version>2.1.1.RELEASE</version>
		</dependency>

application.yml加入如下节点:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080 #配置Sentinel dashboard地址
        # 默认就是8719端口,如果占用会依次+1开始扫描
        port: 8719

这里的 spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

写一个简单的HelloController

@Controller
@RequestMapping(value = "/")
public class HelloController {
	Logger logger = LoggerFactory.getLogger(getClass());

	@RequestMapping("/index")
	public String hello(Model m) {
		m.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date()));
		return "hello";
	}
}

Application.java

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(basePackages = { "com.spell.*" })
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

五、测试实验

/index 路径最多单机阈值为1,保存此规则

多刷几次,会出现被限流,当然这个页面不是很友好,有需要可以去定制:

如何定制:实现BlocakExceptionHandler接口即可。

void handle(HttpServletRequest request,HttpSwervletResponse response,BlockException e) throws Exception;

例子如下:

@Component  //  注册为Bean  让Spring管理
public class SentinelExceptionHandler implements BlockExceptionHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        String msg = "未知异常";
        int status = 429;
 
// 通过判断异常的类型 来判断到底是限流还是熔断降级还是授权限制
        if (e instanceof FlowException) {
            msg = "请求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "请求被热点参数限流";
        } else if (e instanceof DegradeException) {
            msg = "请求被降级了";
        } else if (e instanceof AuthorityException) {
            msg = "没有权限访问";
            status = 401;
        }
 
        response.setContentType("application/json;charset=utf-8");
        response.setStatus(status);
        response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}Sentinel自定义异常");
    }
}

 还有其他的功能,大家可以去多探索:

标签:springBoot,Spring,Alibaba,msg,限流,规则,Sentinel,public,sentinel
From: https://blog.csdn.net/spell007/article/details/140025350

相关文章

  • 1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源
    一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springboot医院远程诊断系统......
  • 基于Springboot的电子招投标系统。Javaee项目,springboot项目。
    演示视频:基于Springboot的电子招投标系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简......
  • 基于Springboot的书籍学习平台(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的书籍学习平台(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界......
  • Spring Boot自动装配
    一、作用为了简化配置,使spring的使用更加方便,例如:可以回忆一下springboot中是如何继承redis的。spring配置方式的进化过程:xml的方式配置javaconfig的方式配置,使用@configuration注解在java中配置自动装配springbootstarter作用:引入模块所需的相关jar包自动配置各自模块......
  • springboot异常解决
    问题解决问题解释出现这个问题表示拦截器或控制器的某个请求处理方法返回了一个与请求路径相同的视图名称,导致视图解析器循环地尝试解析并渲染这个视图,从而引发循环视图路径的异常。问题分析原先的java代码如下@Controller@RequestMapping("/interceptor")publicclassInt......
  • SpringBoot自定义注解实现接口幂等
    一、前言接口幂等就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的。对数据库的查询和删除是天然幂等的,更新操作在大多数场景下也是天然幂等。插入大多数情况下都是非幂等的,除非利用数据库的唯一索引来保证数据不会重复保存。二、为什么需要幂等1.超时重试......
  • 创建springboot项目的具体步骤
    点击newProject点击SpringInitializer创建springboot项目将ServerURL改为start.aliyun.com这样就可以选择java11的版本Location选择文件存放路径Language选择编程语言Type选择项目管理的类型JDK选择项目的JDKJava选择项目的java版本Packaging选择项目的打包......
  • (免费领源码)java#Springboot#mysql物品代拿系统32500-计算机毕业设计项目选题推荐
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术开发,Sp......
  • 基于springbo在线考试系统研究与实现万字文档PPT源码分享
    前言......
  • 基于springboot足球社区管理系统万字文档PPT源码分享
    前言......