Spring Cloud Alibaba —Sentinel

简介: Sentinel分享篇

2.Sentinel

spring cloud alibaba 整合 sentinel

1.引入alibaba-sentinel的starter依赖

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


2.配置application.yml文件

server:
  port: 8010
spring:
  application:
    name: order-sentinel-dev
  cloud:
    sentinel:
      transport:
 #注意 这里是我的vmware centos服务器的IP 
 #需要把这里的ip和端口换成你自己的sentinel dashboard的jar包进程端口
        dashboard: 192.168.86.88:8333


上面提及的sentinel的dashboard需要提供一个jar包进程

并不是内嵌在上面的maven依赖里面的是一个单独的服务

如何 下载jar 并启动该dashboard  

找到sentinel的github 下载对应的jar      https://github.com/alibaba/Sentinel/releases

#8333是我自定义的  可以替换修改

java -Dserver.port=8333 -Dcsp.sentinel.dashboard.server=localhost:8333 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.x.x.jar

启动好之后 运行项目  先请求几次接口  随后访问dashboard      

访问的url是我们  

yml里面配置的  192.168.86.88:8333

Sentinel

QPS   线程数

  1. 流量控制
  • 直接流控
  • 关联流控  
  • 链路流控

自定义流量控制

@RequestMapping("/hello")
@SentinelResource(value="hello",blockHandler="helloBlockHandler")
publicStringgetHello() {
return"hello! hello!";
    }
@RequestMapping("/helloThread")
@SentinelResource(value="helloThread",blockHandler="helloBlockHandler")
publicStringgetHelloThread() throwsInterruptedException {
TimeUnit.SECONDS.sleep(5);
return"hello! hello!";
    }
//BlockException publicStringhelloBlockHandler(BlockExceptione){
return"服务被流控了!";
    }
自定义异常统一处理packagecom.example.ordersentinel.domain;
/*** @ClassName Result* @Description* @Author Jackson* @Date 2023/4/13* @Version 1.0**/publicclassResult<T> {
privateIntegercode;
privateStringmsg;
privateTdata;
publicResult() {
    }
publicResult(Integercode, Stringmsg) {
this.code=code;
this.msg=msg;
    }
publicResult(Integercode, Stringmsg, Tdata) {
this.code=code;
this.msg=msg;
this.data=data;
    }
publicIntegergetCode() {
returncode;
    }
publicvoidsetCode(Integercode) {
this.code=code;
    }
publicStringgetMsg() {
returnmsg;
    }
publicvoidsetMsg(Stringmsg) {
this.msg=msg;
    }
publicTgetData() {
returndata;
    }
publicvoidsetData(Tdata) {
this.data=data;
    }
publicstaticResulterror(Integercode, Stringmsg) {
returnnewResult(code, msg);
    }
}
packagecom.example.ordersentinel.exception;
importcom.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
importcom.alibaba.csp.sentinel.slots.block.BlockException;
importcom.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
importcom.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
importcom.alibaba.csp.sentinel.slots.block.flow.FlowException;
importcom.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
importcom.alibaba.csp.sentinel.slots.system.SystemBlockException;
importcom.example.ordersentinel.domain.Result;
importcom.fasterxml.jackson.databind.ObjectMapper;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.http.MediaType;
importorg.springframework.stereotype.Component;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/*** @ClassName MyBlockExceptionHandler* @Description* @Author Jackson* @Date 2023/4/13* @Version 1.0**/@ComponentpublicclassMyBlockExceptionHandlerimplementsBlockExceptionHandler {
privatestaticfinalIntegerFLOWEXCECODE=100;
privatestaticfinalIntegerDEGRADEEXCECODE=101;
privatestaticfinalIntegerPARAMFLOWEXCECODE=102;
privatestaticfinalIntegerSYSTEMBLOCKEXCECODE=103;
privatestaticfinalIntegerAUTHORITYEXCECODE=104;
Loggerlogger=LoggerFactory.getLogger(this.getClass());
@Overridepublicvoidhandle(HttpServletRequesthttpServletRequest, HttpServletResponsehttpServletResponse, BlockExceptione) throwsException {
logger.info("BlockExceptionHandler-----------------{}", e.getRule());
Resultr=null;
if (einstanceofFlowException) {
r=Result.error(FLOWEXCECODE, "接口限流");
        } elseif (einstanceofDegradeException) {
r=Result.error(DEGRADEEXCECODE, "服务降级");
        } elseif (einstanceofParamFlowException) {
r=Result.error(PARAMFLOWEXCECODE, "热点参数限流");
        } elseif (einstanceofSystemBlockException) {
r=Result.error(SYSTEMBLOCKEXCECODE, "触发系统保护规则");
        } elseif (einstanceofAuthorityException) {
r=Result.error(AUTHORITYEXCECODE, "授权不通过");
        }
httpServletResponse.setStatus(500);
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);
newObjectMapper().writeValue(httpServletResponse.getWriter(), r);
    }
}



流控效果

  • 快速失败  
  • Warm up
  • 排队等待
目录
相关文章
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
379 1
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
4795 2
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
1974 7
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
2961 13
Spring Cloud Alibaba:一站式微服务解决方案
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
3961 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
1444 4