sentinel流控降级与熔断

简介: sentinel流控降级与熔断

人们因为能忘却,所以自己能渐渐的脱离了受过的苦痛,也因为能忘却,所以照样得再犯前人的错误。——鲁迅

引入依赖

<!--    sentinel 降级熔断    -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--    与sentinel控制台进行通信    -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.7.1</version>
</dependency>

下载客户端jar包

然后输入命令运行

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

若您的应用使用了 Spring AOP,您需要通过配置的方式将 SentinelResourceAspect 注册为一个 Spring Bean:

@Configuration
public class SentinelAspectConfiguration {
  @Bean
  public SentinelResourceAspect sentinelResourceAspect() {
            return new SentinelResourceAspect();
  }
}

然后在配置文件配置

sentinel:
  transport:
    port: 9001
    dashboard: localhost:9000
  filter:
    enabled: true
    url-patterns: /**

因为我们可以看到运行后输出的

2021-03-16 23:24:49.986 INFO 18604 — [ main] c.a.c.s.SentinelWebAutoConfiguration : [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/*].

所以需要配置url-patterns: /**否则只有一层url会被监控到

/**
     * 登录成功时调用该接口,传入一句话
     *
     * @param word 参数 例子:?word=登录成功!
     * @return 返回json格式的map
     */
    @GetMapping("say")
    public AjaxJson say(@RequestParam String word) {
        return AjaxJson.success().put("data", word);
    }

访问控制台localhost:9000(上面配置的9000端口)

输入默认用户名密码sentinel

然后找到我们需要限流的接口点击流控

然后我们每秒就只能访问一次了

接下来是服务降级

我们可以在配置文件开启

feign:
  sentinel:
    enabled: true

然后实现我们的feign接口

package com.ruben.feign.fallback;
import com.ruben.feign.ConsumerService;
import com.ruben.pojo.dto.PageDTO;
import com.ruben.utils.AjaxJson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
 * @ClassName: ConsumerServiceFallback
 * @Description: 我还没有写描述
 * @Date: 2021/3/16 0016 22:14
 * *
 * @author: <achao1441470436@gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
@Slf4j
@Service
public class ConsumerServiceFallback implements ConsumerService {
    @Override
    public AjaxJson list(PageDTO pageDTO) {
        log.error("服务挂了");
        return AjaxJson.error("");
    }
    @Override
    public AjaxJson dropWare() {
        log.error("服务挂了");
        return AjaxJson.error("");
    }
}

最后在feign接口使用@FeignClientfallback参数指定降级实现

package com.ruben.feign;
import com.ruben.feign.fallback.ConsumerServiceFallback;
import com.ruben.pojo.dto.PageDTO;
import com.ruben.utils.AjaxJson;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "ruben-consumer", fallback = ConsumerServiceFallback.class)
public interface ConsumerService {
    @GetMapping("study/list")
    AjaxJson list(@RequestBody PageDTO pageDTO);
    @GetMapping("ware")
    AjaxJson dropWare();
}

然后访问我们的接口如果出现异常,则会调用我们的降级实现

我们再配置熔断

点击我们远程接口的降级按钮

配置完成后如果我们再远程调用在5秒内异常比例超过百分之八十,则之后都会直接调用我们的降级实现了

自定义受保护的资源

可以在接口上加@SentinelResource注解

也可以在代码中

@Override
    @Transactional
    @GlobalTransactional
    public AjaxJson order() {
        try (Entry entry = SphU.entry("resourceName")) {
            consumerService.dropWare();
//        mpOrderMapper.insert(OrderPO.builder().id(1L).build());
        } catch (BlockException e) {
            return AjaxJson.error("慢点");
        }
        return AjaxJson.success();
    }
}

加上try(Entry entry = SphU.entry("{资源名}")){}catch(BlockException e){}

后即可把这段代码作为一个受保护的资源

我们可以在catch中编写我们的降级方法

然后我们需要在流控规则中新建

然后可以看到我们成功实现流控我们的受保护资源

相关文章
|
5月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
150 3
|
6月前
|
Java 数据库连接 Maven
如何使用Sentinel实现流控和降级
通过以上步骤,你可以使用Sentinel实现应用的流量控制和降级操作,以保护系统在高流量或不稳定情况下的稳定性。欢迎关注威哥爱编程,一起学习成长。
|
2月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
5月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
130 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
5月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
115 0
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
82 1
|
29天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
4月前
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
229 0