将Spring Boot/Spring Cloud应用接入AHAS应用防护后,可以对其配置流控、隔离、熔断、系统或热点规则来保证系统稳定性。本文介绍如何使用SDK方式将Spring Boot/Spring Cloud应用接入应用防护。
操作步骤
- 登录AHAS控制台。
- 在AHAS控制台左上角,选择应用接入的地域。
- 在控制台左侧导航栏中选择 。
- 在应用防护页面右上角单击新应用接入。
- 在JAVA语言页签,单击SDK接入,然后单击Spring Boot应用接入。
- 在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依赖中查看Pom依赖最新版本,将
x.y.z
替换为新版本的版本号。 - 在应用工程中添加埋点。
- 添加HTTP埋点:引入spring-boot-starter-ahas-sentinel-client依赖后,应用会自动添加Web接口埋点。
说明
- 若您从1.5.1之前的版本升级到1.5.1+版本,或额外引入了Web filter等的bean,需要先将之前注册bean的相关代码去掉,否则可能会导致重复统计。
- 注解方式blockHandler和fallback函数的方法签名有限制,具体信息,请参见注解方式。
- 1.8.0及以上版本注解方式埋点支持自动重试规则。
- 添加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>
- 添加普通接口埋点(注解方式):
- 引入spring-boot-starter-aop。
说明 若您的工程中已引入此依赖,则跳过此步骤。
- 在业务方法使用注解作为埋点。
若不配置BlockHandler,则被流控降级时方法会直接抛出BlockException,若方法未定义Throws BlockException则会被JVM包装一层UndeclaredThrowableException。BlockHandler和Fallback 函数的方法签名有限制,详情请参见配置触发规则后的逻辑。
@SentinelResource(value = "getUserById") public User getUserById(String id) { return new User(id); }
- 引入spring-boot-starter-aop。
- 添加Feign埋点:引入Starter依赖后,在application.properties文件中配置
feign.sentinel.enabled
即可。Feign埋点的资源名格式为feign:${httpMethod}:${url}
,例如feign:http://localhost:8088/hello
。说明 spring-boot-starter-ahas-sentinel-client 1.8.4及以上版本支持。
- 添加HTTP埋点:引入spring-boot-starter-ahas-sentinel-client依赖后,应用会自动添加Web接口埋点。
- 通过以下任意一种方式,配置应用的启动参数。
- 添加JVM -D参数。
//将AppName替换为自定义的应用名称。 -Dahas.namespace=default -Dproject.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>
若在公网地域,需要查看License信息。请在第三步:配置启动参数区域查看(非公网地域不需要),具体请参见查看License。
- 添加JVM -D参数。
- 可选:您可以自定义Spring Boot应用触发限流、降级或系统保护规则时的处理逻辑。
- 若添加HTTP埋点,则使用Web Servlet Filter方式配置处理逻辑。具体操作,请参见Web Servlet Filter。
- 若添加自定义埋点,则使用注解方式配置处理逻辑。具体操作,请参见注解方式。
说明 若未执行此步骤,当Web接口触发流控降级规则时,返回默认的提示信息(状态码为429);注解方式接口默认抛出BlockException异常类的子类(触发流控规则,则抛出流控异常FlowException;触发降级规则,则抛出降级异常DegradeException),若方法未定义throws BlockException则会被JVM包装一层UndeclaredThrowableException。
结果验证
登录AHAS控制台,在左侧导航栏选择 ,若在应用防护页面出现该应用的资源卡片且有数据上报,则说明接入成功。
