将Spring Boot/Spring Cloud应用接入AHAS应用防护后,可以对其配置流控、隔离、降级、系统或热点规则来保证系统稳定性。本文将帮助您了解如何使用SDK方式将Spring Boot/Spring Cloud应用接入应用防护。

操作步骤

  1. 登录AHAS控制台,然后在页面左上角选择地域
  2. 在左侧导航栏中选择流量防护 > 应用防护
  3. 应用列表页面右上角单击新应用接入
  4. 接入语言选择Java接入方式选择SDK接入接入环境选择Spring Boot应用接入
    Spring Boot应用接入页面查看Pom依赖最新版本和License信息(非公网地域不需要)。
    图 1. Spring Boot应用接入
    Spring Boot
  5. 在Spring Boot应用的Pom文件中引入依赖:
    <dependency>
      <groupId>com.alibaba.csp</groupId>
      <artifactId>spring-boot-starter-ahas-sentinel-client</artifactId>
      <!-- 可指定版本号,最新版本见AHAS控制台流量防护应用接入页。 -->
      <version>x.y.z</version>
    </dependency>
    说明Spring Boot应用接入页签查看Pom依赖最新版本,将x.y.z替换为新版本的版本号。
  6. 在应用工程中添加埋点
    • 添加HTTP埋点: 引入spring-boot-starter-ahas-sentinel-client依赖后,应用会自动添加Web接口埋点。
      说明 若您从1.5.1之前的版本升级到1.5.1+版本,或自己额外引入了Web filter等的bean,需要先将之前注册bean的相关代码去掉,否则可能会导致重复统计。
    • 添加MyBatis SQL埋点:
      • 若您使用了MyBatis Spring Boot Starter,则引入AHAS依赖后会自动识别DAO埋点(需要spring-boot-starter-ahas-sentinel-client 1.5.1及以上版本)。
      • 若您未使用MyBatis Spring Boot Starter ,则需在MyBatis应用的XML配置文件中引入SentinelMyBatisMapperInterceptor拦截器依赖:
        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE configuration
                PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
            <plugins>
              <!-- 引入AHAS Sentinel拦截器 -->
                <plugin interceptor="com.alibaba.csp.sentinel.adapter.mybatis.SentinelMyBatisMapperInterceptor"/>
            </plugins>
        </configuration>
    • 添加普通接口埋点(注解方式):
      1. 引入spring-boot-starter-aop
        说明 若您的工程中已引入此依赖,则跳过此步骤。
      2. 在业务方法使用注解作为埋点。

        若不配置BlockHandler,则被流控降级时方法会直接抛出BlockException,若方法未定义Throws BlockException则会被JVM包装一层UndeclaredThrowableException。BlockHandlerFallback 函数的方法签名有限制,详情请参见配置触发规则后的逻辑

        @SentinelResource(value = "getUserById")
        public User getUserById(String id) {
          return new User(id);
        }
  7. 通过以下任意一种方式,配置应用的启动参数。
    • 添加JVM -D参数。
      ahas.namespace=default
      project.name=AppName
      //将AppName替换为自定义的应用名称,将 <license> 替换为真实值。
      -Dproject.name=AppName
      -Dahas.license=<license>
    • application.properties文件中添加以下内容:
      #指定您要接入的特定的AHAS环境ahas.namespace=default
      #自定义您的应用名称project.name=AppName
      #指定您要接入的特定的AHAS环境ahas.namespace=default
      #自定义您的应用名称project.name=AppName
      #配置license信息ahas.license=<license>
  8. (可选)您可以自定义Spring Boot应用触发限流、降级或系统保护规则时的处理逻辑。
    • 若添加HTTP埋点,则使用Web Servlet Filter方式配置处理逻辑,请参见Web Servlet Filter
    • 若添加自定义埋点,则使用注解方式配置处理逻辑,请参见注解方式
    说明 若未执行此步骤,当Web接口触发流控降级规则时,返回默认的提示信息(状态码为429);注解方式接口默认抛出BlockException异常类的子类(触发流控规则,则抛出流控异常FlowException;触发降级规则,则抛出降级异常DegradeException),若方法未定义throws BlockException则会被JVM包装一层UndeclaredThrowableException。

结果验证

启动应用并调用配置埋点的方法,该应用将出现在AHAS控制台流量防护 > 应用防护页面,若有用户访问该应用,该应用的监控详情页面有能看到配置埋点的方法。

后续操作

为应用配置流控降级规则请参见以下文档: