Sentinel 初体验

文章介绍了如何在项目中集成阿里巴巴的Sentinel进行流量控制,包括添加相关Maven依赖,配置Sentinel控制台,设置流控规则,以及使用@SentinelResource注解进行接口流量控制和异常处理的方法。
摘要由CSDN通过智能技术生成

1 添加jar

<!--    sentinel核心库    -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.8.6</version>
        </dependency>
        <!--    如果要使用@SentinelResource必须添加此依赖    -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-annotation-aspectj</artifactId>
            <version>1.8.1</version>
        </dependency>
        <!-- 连接sentinel控制台-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.8.6</version>
        </dependency>
  1. idea
    在这里插入图片描述
-Dcsp.sentinel.app.type=1
-Dcsp.sentinel.dashboard.server=127.0.0.1:8858
-Dproject.name=chutiyan
  1. bootstrap.yml
#运行端口
server:
  port: 9011
#数据库配置
# spring 配置
spring:
  application:
    # 应用名称
    name: base-study
  profiles:
    # 环境配置
    active: dev
  cloud:
    sentinel:
      # 取消控制台懒加载
      eager: true
      transport:
        # 控制台地址
        dashboard: 127.0.0.1:8858
        port: 8719
        #clientIp: localhost:9011
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # namespace
        namespace: wangmutian
      config:
        # namespace
        namespace: ${spring.cloud.nacos.discovery.namespace}
        # 配置中心地址
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
management:
  endpoint:
    sentinel:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'

4.添加bean(SentinelResourceAspect)【本实例放在了启动类中】

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

第三步、代码实现

/**
     * <h1>spring 初始化方法</h1>
     * <h1>@PostConstruct是Spring带的,当前这个bean在被spring容器创建的时候,就会自动的调用
     * 被@PostConstruct这个注解修饰的方法进行初始化</h1>
     */
    @PostConstruct // init-method
    private static void initFlowRules() {
        // 流控规则
        List<FlowRule> rules = new ArrayList<>();
        // 流控
        FlowRule ruleUser = new FlowRule();
        // 为哪个资源进行流控
        ruleUser.setResource(USER_NAME);
        // 设置流控规则类型 sQPS
        ruleUser.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 设置受保护的资源阙值
        ruleUser.setCount(1);
        rules.add(ruleUser);

        // 加载配置好的规则
        FlowRuleManager.loadRules(rules);
    }


/**
     * <h1>
     *
     * @param id
     * @return
     * @SentinelResource 改善接口中资源定义和被流控降级后的处理方法
     * value 是定义资源
     * blockHandler 设置被流控降级后的处理方法(默认该方法必须声明在同一个类中)
     * fallback 当接口中出现了异常,就可以交给fallback指定的方法进行处理
     *
     * </h1>
     */
    @RequestMapping(value = "/user")
    @SentinelResource(value = USER_NAME, fallback = "fallBackHandleForGetUser", blockHandler = "blockHandlerForGetUser")
    public User getUser(@RequestParam("id") String id) {
        int a = 1 / 0;
        return new User(id);
    }

    /**
     * getUser接口出现了异常,交由他处理
     *
     * @param id
     * @param e
     * @return
     */
    public User fallBackHandleForGetUser(String id, Throwable e) {
        e.printStackTrace();
        return new User("异常处理");
    }

    /**
     * <h1>
     * 注意:
     * 1、一定要是public
     * 2、返回值一定要和源方法保证一致,包含源方法的参数
     * 3、可以在参数的最后添加BlockException 可以区分是什么规则的处理方法
     * </h1>
     *
     * @param id 源方法的参数
     * @param e  异常处理
     * @return {@link User}
     */
    public User blockHandlerForGetUser(String id, BlockException e) {
        e.printStackTrace();
        System.out.println(id + "被限流了");
        return new User(id + "被限流了");
    }

最后

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值