速通springcloud--03Sentinel

php对接建行h5网页支付 php对接建行h5网页支付前言H5页面支付H5页面支付回调通知退款及其他的业务 前言 最近接到公司乙方要求,需要再支付上面增加建行的支付渠道。之前一直用的都是微信和支付宝这种第三方支付平台,银行直接对接比较少。没办法就只能上网搜索,搜索一番返现网上对接建行的资料比较少,没办法只好摸着石头过河,中间也借鉴了一些大佬的文章内容。 H5页面支付 根据建行的h5网页支付对接文档,还是可以看出是比较简单的。... 阅读详情

Sentinel

资源
通过@SentinelResource来标识需要由sentinel管理,保护的资源。对于主流框架sentinel进行了适配,所有的Web接口均为资源

规则
通过Sentinel控制台我们可以定义流量控制,熔断降级,系统保护,来访控制,热点参数等的规则,可以将其作用于资源上。

整合sentinel

官网:https://sentinelguard.io
sentinel面板下载地址:https://github.com/alibaba/Sentinel/releases

  1. 下载好sentinel面板
  2. 引入sentinel依赖
    1. spring-cloud-starter-alibaba-sentinel
    2. 由于所有微服务都可能会用到sentinel,那么在管理微服务的模块(services模块)中添加该依赖
  3. 编写yml配置文件
    1. 要用到sentinel的微服务都有在yml文件中添加该段
spring:
    cloud:
        sentinel:
            transport:
                dashboard: localhost:8080
            eager: true #让项目一启动就让该项目连上dashboard

异常处理

当请求违背规则时会抛出一个BlockException异常,而具体来分又会抛出FlowException(流量控制异常);;ParamFlowException(热点参数异常);DegradeException(熔断降级异常);AuthorityException(权限控制异常);SystemBlockException(系统保护异常)。由于资源的不同,又会又不同的异常处理机制。

web接口异常

当对web接口的访问被sentinel规则限制会抛出该异常(可以理解为作用于controller)

自定义web请求异常访问

默认情况下会使用springmvc的SentinelWebInterceptor(web拦截器),它只会使用默认的BlockExceptionHandler进行处理(返回一个页面),而实际开发中,我们需要的是返回一个json对象。

要实现该功能我们需要使用@SentinelResource注解来标注作用的资源,然后去实现BlockExceptionHandler,并将其放入到ioc容器中即可

下面这个例子会对创建订单请求进行流量控制,并且自定义返回的错误信息为json串

1.添加流控规则

我们可以在sentinel控制台中看到名为/create的资源,该资源是一个远程调用接口,用以获取商品数据
然后点击流控,对其添加流控规则为QPS,单机阈值为1.
此时如果多次发送请求则会返回一个默认的错误页面

2.自定义异常返回结果
// model模块 com.atli.common.R
// 用于定义所有响应 
@Data
public class R{
    private Integer code;
    private String msg;
    private Object data;

    public static R ok(){
        R r = new R();
        r.setCode(200);
        return r;
    }

    public static R ok(String msg,Object data){
        R r = new R();
        r.setCode(200);
        r.setMsg(msg);
        r.setData(data);
        return r;
    }
    p    public static R error(){
        R r = new R();
        r.setCode(500);
        return r;
    }

    public static R error(Integer code,String msg){
        R r = new R();
        r.setCode(code);
        r.setMsg(msg);
        return r;
    }
}

// com.atli.order.exception.MyBlockExceptionHandler
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler{
    // 这是springMVC整合了jackson的json工具
    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public void handle(HttpServletRequest request,HttpServletResponse response,String resourceName,BlockException e) throws Exception{
        PrintWriter writer = response.getWriter();
        response.setContentType("application/json;charset=utf-8");
        R.error(500,resourceName+"bei1Sentinel限制:"+e.getMessage())

        writer.write(objectMapper.writeValueAsString(error));
    }
}

SentinelResource资源

@SentinelResource注解可以用来声明资源,一般用在非controller层(controller层是接口本身默认就是资源),在SentinelResourceAspect切面中,切点表达式定义了使用该注解注解的方法都会被sentinel切入

// com.atli.order.service.impl.OrderServiceImpl
// 这里将一个远程调用方法声明为资源,用以管控
// 资源会展示在sentinel控制台中,可以对其进行流控/熔断/热点/授权等设置
// blokHandle用于指定兜底回调,若没有指定则会交给SpringBoot全局异常处理器进行处理
@SentinelResource(value="createOrder",blockHandle = "createOrderFallback")
@Override
public Order createOrder(Long productId , Long userId){
    //之前写的远程调用商品服务的代码
}

// 定义兜底回调,该回调会在createOrder方法调用失败后执行(被sentinel限制)
// 要注意,该回调除开方法名外要与原方法一致,并且可以在参数列表中添加一个异常
public Order createOrderFallback(Long productId , Long userId , BlockException e){
    //兜底回调的逻辑,比如返回一个全为特殊值(0,默认等)的Order对象进行返回
}

OpenFeign调用

可以去看OpenFeign的默认返回章节

流控规则

总的来说,流控的主要目的是限制多余请求,以保护系统资源不被耗尽,保护系统的稳定性

在sentinel控制台我们可以新增流控规则,可以对来源,阈值类型,单机阈值,集群,流控模式,流控效果等进行设置

  • 资源名
    • 用以表示要进行限制的资源名称
  • 针对来源
    • 表示对资源访问的来源,默认为default,表示所有来源
    • 可以类比为http请求的发起方
  • 阈值类型
    • QPS
      • 表示在1s内最多的请求个数
    • 并发线程数
      • 效果同QPS,但由于要统计线程数,会影响性能
  • 单机阈值
    • 表示一个服务器最多能接收的请求个数
  • 是否集群
    • 若勾选,会由集群阈值模式选项,分为单机均摊和总体阈值
    • 此时单机阈值选项会变为均摊阈值
    • 单机均摊则每台阈值为设定值。总体阈值则整个集群的最大请求数
  • 流控模式
    • 直接策略
      • 直接对该资源进行限制
    • 关联策略
      • 关联资源
        • 与自身资源需要进行关联的资源
      • 当资源A和B都访问同一资源C时,若对资源A设置了关联策略,并将关联资源设置为了B,那么当访问量过大时会优先满足资源B的需求,对资源A进行限制
    • 链路策略
      • 要使用链路策略我们还需要在配置文件中对sentinel的web-context-unify设置为false,该配置项表示是否要统一web的上下文
      • 入口资源
        • 调用链路的入口
      • 在调用链路中,可能会有多条从入口到目标资源的资源路径,通过链路策略,我们可以管控从入口到目标资源路径上的资源(例如有2个并联资源,若对A不限制,那么对目标资源的限制其实作用在B上)
  • 流控效果
    • 快速失败
      • 超出阈值的请求直接抛出异常
    • Warm Up(冷启动)
      • QPS,最大请求数
      • Period 冷启动周期
      • 例:假设QPS=3,Period=3,那么当大量请求到达后QPS会从0开始,递增Period次,到达设置的QPS值,之后一直按照QPS的值进行限流
    • 排队等待
      • timeout
        • 排队超时事件
      • 当大量请求到达后,该资源会将所有请求进行排队,超过了timeout时间的请求会被丢弃
      • 例:QPS=2,timeout=3,那么每次都会将6个请求放入到队列,其余请求都会被抛弃
    • 只有快速失败支持链路和关联策略

熔断规则

雪崩效应:
当微服务集群中某个服务存在问题无法及时响应时,调用它的其他微服务就会积压请求,使得自身资源被快速消耗,无法及时响应数据。由于一个服务异常而导致一堆服务异常的这种现象被称为雪崩

熔断降级:
为了避免雪崩效应,让失败的请求快速返回不积压,切断不稳定调用的机制就称为熔断降级。
熔断降级作为保护自身的手段,通常在调用端进行配置

  • 断路器:

    • 闭合
      • 正常访问
    • 打开
      • 发生熔断,在熔断时长到达之前都拒绝访问
      • 熔断时长结束后进入半开状态
    • 半开
      • 先放行一个请求作为探测
      • 若成功则断路器闭合
      • 若失败则断路器重新打开
  • 熔断策略

    • 慢调用比例
      • 最大RT:设置统计的最大响应时长
      • 比例阈值:在统计时长内超过最大RT的请求数的比例大于比例阈值则熔断
    • 异常比例
      • 在统计时长内有超过比例阈值的异常调用(执行了兜底回调)会发生熔断
    • 异常数
      • 在统计时长内超过了设置异常数的异常请求则发生熔断

热点规则

热点是经常访问的数据。热点参数限流可以看作是一种特殊的流量控制,仅对包含热点参数的资源调用生效

要使用热点规则,需要对接受请求的api接口添加@SentinelResource注解,并指定兜底回调,之后再在sentinel控制台对其请求的参数进行限制

例如,我需要同一个用户不能重复发起请求

@GetMapping("/seckill")
@SentinelResource(value = "seckill-order",fallback = "seckillFallback")
public Order seckill(@RequestParam("userId") Long userId,@RequestParam("productId") Long productId){
    Order order = orderService.createOrder(productId,userId);
    order.setId(Long.MAX_VALUE);
    return order;
}

// sentinel异常机制中先走blockHandle异常,若无才走fallback异常
// 这里是fallback回调,使用该回调可以处理所有异常,blockHandle只能处理流控异常
public Order seckillFallback(Long userId,Long productId,Throwable exception){
    //需要兜底返回的内容
}

此时我们只需要在控制台中找到该资源,然后点击添加熔断,将参数索引设置为0,单机阈值设置为1,统计窗口时长也设置为1,那么在1s内每个用户就都只能发送一个请求

UCIE Specification详解(三) Protocol Layer(协议层)以及Die-to-Die Adapter 阅读详情

相关推荐

大疆精灵3无人机2.4GHz通信系统实测:跳频扩频技术深度解析

跳频扩频(FHSS)是一种经典的扩频通信技术,其核心原理是通过让载波频率在一个宽频带上按伪随机序列快速跳变,将窄带信号的能量扩散开来。这种技术能有效对抗固定频率干扰,提升通信的可靠性和抗截获性,在无线遥控、军事通信等领域具有重要价值。在无人机、物联网等对实时性与可靠性要求高的应用场景中,FHSS技术能显著增强复杂电磁环境下的链路鲁棒性。本文以频谱分析仪实测大疆精灵3无人机为例,深入剖析其2.4GHz频段遥控与图传系统的工作特性,揭示了其采用的成熟FHSS方案,包括约76MHz的总跳频带宽、39个信道及约2M

weixin_33935636的博客 310

Spring Cloud Alibaba一一SentinelResource

若希望使用其他类的函数,则可以指定fallbackClass为对应的类的Class对象,注意对应的函数必须为static函数,否则无法解析。blockHandler函数默认需要和原生方法在同一个类中,如果希望使用其他类的函数,则需要指定blockhandlerClass为对应的类的Class对象,注意对应的函数必须为static函数,否则无法解析。Feign调用服务过程中,服务出现故障,如果服务中存在全局异常管理器,会认为这个故障已经被服务处理了,然后返回一个空的对象,feign不会调用自己的降级方法。

Jum的博客 1221

wpf入门第五篇 WPF with ECharts

前言 本文是wpf入门系列第五篇,面向有winform或者web前端基础的、并且也有C#基础的同学。 ECharts是百度团队开发的开源免费的js图表控件库,非常强大,文档齐全。WPF中使用图表,除了可以选择devexpress或者oxyplot之类的专为wpf开发的图表控件之外,还可以考虑使用 WebBrowser+ECharts 来完成复杂的图表展示,其展示效果不亚于前者。 本文介绍了 WP...

wf824284257的博客 1万+

第四篇 SpringCloud Alibaba Sentinel实现熔断与限流(下篇)

官网地址: https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81 1.1按资源名称限流+后续处理 1.1.1业务代码 准备 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public cl

盲目的拾荒者的博客 422

OpenWRT软件源更换保姆级教程:从国内镜像到官方源一键切换(含常见报错解决)

本文提供OpenWRT软件源更换的详细教程,涵盖从国内镜像源到官方源的切换方法,并深度解析常见报错解决方案。针对国内网络环境,指导用户如何精准定位系统信息、备份配置、选择并配置清华等国内镜像源,以及处理签名验证失败、依赖缺失、404错误等典型问题,旨在提升软件包管理效率与稳定性。

weixin_29229261的博客 1931

别再纠结了!手把手教你根据项目需求选对目标检测框架(MMDetection/Detectron2/YOLOv8实战对比)

本文详细对比了三大目标检测框架MMDetection、Detectron2和YOLOv8的适用场景与实战技巧,帮助开发者根据项目需求精准选型。从毕业设计到工业落地,分析不同场景下的核心需求与框架优势,提供决策树和避坑指南,确保技术选型与项目目标高度匹配。

weixin_30342209的博客 553

Sentinel @SentinelResource注解非接口方法限流和降级

一、Controller @RestController @RequestMapping("/test/") public class TestController { @Autowired private TestService testService; @RequestMapping("test") public String test() { String str = testService.findByName("test");

oJueQiang123456的博客 641

在Simulink中实现一个基于SiC MOSFET的高效率电机驱动系统

本文介绍了在Simulink中构建基于SiC MOSFET的高效率电机驱动系统的详细流程。系统由直流电源模块、SiC MOSFET逆变器模块、PMSM电机模型、控制策略模块(包括矢量控制和PWM生成)以及反馈测量模块组成。文章逐步指导了从模型创建到参数设置的完整过程,包括各模块的具体实现方法。通过仿真可以评估系统在不同负载条件下的响应速度、效率、功率密度等性能指标。该建模方法为电机驱动系统的设计和优化提供了有效工具,同时建议根据实际硬件规格和工程需求进行参数调整和定制化开发。

xiaoheshang_123的博客 248

SpringCloud Alibaba学习(九):Sentinel的@SentinelResource注解详解

如果不知道如何配置sentinel或者不知道如何打开文章中的一些网页,可以参考我前面的文章: SpringCloud Alibaba学习(五):Sentinel的介绍与搭建 一、按资源名称限流+后续处理 1、修改8401 (1)在pom中增加自己之前写过的的工具api <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> &...

m0_49499183的博客 769

【WRFDA第一期】WRF数据同化概述及资源整理

【WRFDA第一期】WRF数据同化概述及资源整理

WW、forever的博客 1658

【CAN总线测试】——通讯相关诊断测试

本章主要介绍通讯相关诊断测试用例设计

LOVE135149的博客 1813

@SentinelResource注解使用详解

前言 现在我们了解到通过Sentinel控制对Spring mvc接口层级的控制,那么在我们实际项目开发时不仅仅限于接口,可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。 那么如何使用@SentinelResource注解灵活的定义控制资源以及如何配置控制策略。 自定义资源点 下面的例子基于您已经引入了Spring Cloud Alibaba Sentinel为基础。 第一...

weixin_41213402的博客 2万+

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 926

springcloud整合sentinel

为什么使用sentinel 在微服务的架构中,微服务的数据是很多的,并且肯定会有微服务之间相互调用的情况。如果当一个被调用的微服务因为某种原因,处理业务的时间很长的时候,他的调用者就会也等待很长的时间。这样就会出现因为一个微服务的问题,导致整个服务器的瘫痪、无法处理请求等问题。 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel

qq_15513905的博客 624

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringCloud Alibaba 03 (Sentinel服务熔断降级,Sentinel规则)

官网:https://sentinelguard.io/zh-cn/index.htmlSentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控。

Fuck1269185654的博客 1500

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringCloud Alibaba-03 Sentinel服务熔断与限流

此时就可以使用Sentinel提供的授权规则来实现,Sentinel的授权规则能够根据请求的来源判断是否允许本次请求通过。controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;在Sentinel的授权规则中,提供了 白名单与黑名单 两种授权类型。sentinel中的流控配置等配置在项目重启后会消失,但Nacos中的不会。strategy:流控模式,0表示直接,1表示关联,2表示链路;grade:阈值类型,0表示线程数,1表示QPS;

qq_53568730的博客 775

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Springcloud Alibaba Sentinel学习及使用

Springcloud Alibaba Sentinel:熔断、降级、限流一、概念介绍 一、概念介绍 1、什么是熔断? 2、什么是限流? 3、区别?

furenqiang的博客 781

SpringCloud-服务降级/熔断和Sentinel

SpringCloud-Sentinel的使用

Zong_0915的博客 800

springcloud-alibaba (03)Sentinel规则-笔记

本文介绍了Sentinel规则的使用方法,通过配置热点参数和热点规则,可以针对某个参数设置热点参数规则,从而限制该参数的请求量,保护系统的稳定性;通过配置授权规则,可以限制特定资源只允许某些关联应用或IP访问,保护资源不被恶意或未授权的访问所滥用。本文详细介绍了Sentinel规则的配置方法和使用场景,并给出了代码实例和测试结果。

个人笔记总结 1221

springcloud-alibaba (03)sentinel下载安装

本文介绍了如何在Linux中下载安装Spring Cloud Alibaba Sentinel。首先,我们需要下载Sentinel并将其上传到服务器,然后编写启动脚本并启动Sentinel。我们还介绍了如何在Windows上访问Sentinel控制台,并提供了一些解决访问问题的方法。需要注意的是,本文提供的内容是初步的,可能需要进一步的研究和实践。

个人笔记总结 1672

SpringCloud Alibaba-Sentinel

SpringCloud Alibaba-Sentinel

爱笑的boy的博客 1115

SpringCloud --day03-- Sentinel

本文介绍了Spring Cloud Alibaba Sentinel的工作原理及其在微服务稳定性保护中的应用。Sentinel通过流量控制、熔断降级、热点防护等多维度保障服务稳定性。文章详细讲解了资源定义、规则配置及异常处理机制,并提供了与Dashboard的整合方法。此外,还深入探讨了流控模式(直接、关联、链路)、流控效果以及热点参数限流的实现方式。最后,通过秒杀场景示例展示了如何配置例外规则,满足特定业务需求。Sentinel的灵活配置和强大功能使其成为微服务架构中不可或缺的稳定性保障工具。

m0_57014677的博客 407

SpringCloud---Sentinel

文章目录限流sentinel使用环境搭建设置限流,默认直接模式关联模式链路模式关闭URL PATH聚合熔断/降级设置模拟环境满调用比例规则Sentinel 异常处理模式异常处理自定义异常处理热点测试热点环境搭建系统规则授权规则测试授权规则的环境搭建设置授权规则 限流 限流的目的防止恶意请求流量、恶意攻击,或者防止流量超过系统峰值 sentinel使用环境搭建 添加pom依赖 <dependency> <groupId>com.alibaba.cloud</grou

一睹人间盛世颜 834

SpringCloud Alibaba基础篇-03-Sentinel实现熔断与限流

官网资源名:唯一名称,默认请求路径针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)阈值类型/单机阈值:QPS(每秒钟的请求数量):当调用该api的QPS达到阈值的时候,进行限流线程数:当调用该api的线程数达到阀值的时候,进行限流是否集群:不需要集群。流控模式:直接:api达到限流条件时,直接限流关联:当关联的资源达到阈值时,就限流自己。

Alan0517 674

SpringCloud 系列 03:Sentinel集成配置+核心规则+Nacos持久化

Sentinel是阿里巴巴开源的分布式系统流量治理组件,专注于流量控制、熔断降级和系统保护。核心功能包括:1)流量控制,支持QPS/线程数限制及多种流控策略;2)熔断降级,基于异常比例/慢调用等指标自动切断故障服务;3)系统自适应保护,根据系统负载动态调整流量。相比传统限流工具,Sentinel提供分布式支持、可视化管控和动态规则配置,特别适合微服务架构。通过@SentinelResource注解标记资源,结合Dashboard实现规则配置与监控。持久化方面支持将规则保存到Nacos等配置中心,确保规则不丢

A13549502743的博客 898

springcloud-alibaba (03)feign整合sentinel

大家好 👋 ,今天我要向大家推荐的是 Spring Cloud Alibaba Sentinel 🛡️,这是一个兼容 Spring Cloud 的轻量级服务容错框架,它提供了流量控制 🚦、熔断降级 🔥 等功能,为应用程序保驾护航 🤝。在 Spring Cloud Alibaba Sentinel 中,我们可以用 Feign 整合 Sentinel 来实现更为灵活的流量控制和熔断降级 💪。首先,在项目中添加必要的依赖,然后在 application.yml 文件中进行配置设置。接着

个人笔记总结 477
上一篇: 速通springcloud--02OpenFeign
下一篇: 速通springcloud--04gateway
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值