將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的相關代碼去掉,否則可能會導致重復統計。
添加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>
添加普通接口埋點(注解方式):
- 說明
若您的工程中已引入此依賴,則跳過此步驟。
在業務方法使用注解作為埋點。
若不配置BlockHandler,則被流控降級時方法會直接拋出BlockException,若方法未定義Throws BlockException則會被JVM包裝一層UndeclaredThrowableException。BlockHandler和Fallback 函數的方法簽名有限制,詳情請參見配置觸發規則后的邏輯。
@SentinelResource(value = "getUserById") public User getUserById(String id) { return new User(id); }
添加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及以上版本支持。
通過以下任意一種方式,配置應用的啟動參數。
添加JVM -D參數。
類別
參數示例
非公網
-Dahas.namespace=default -Dproject.name=AppName -Dahas.regionId=<RegionId>
說明將AppName替換為自定義的應用名稱。
將<RegionId>替換應用所在地域,地域與RegionId對應表請參見下文地域與RegionId對應表。
公網
-Dahas.namespace=default -Dproject.name=AppName -Dahas.license=<license> -Dahas.regionId=cn-public
說明將AppName替換為自定義的應用名稱,將<license> 替換為真實值。
在application.properties文件中添加以下內容:
類別
示例
非公網
#指定您要接入的特定的AHAS環境。
ahas.namespace=default
#自定義您的應用名稱。
project.name=AppName
#填寫應用所在地域。
ahas.regionId=RegionId
說明將RegionId替換應用所在地域,地域與RegionId對應表請參見下文地域與RegionId對應表。
公網
#指定您要接入的特定的AHAS環境。
ahas.namespace=default
#自定義您的應用名稱。
project.name=AppName
#配置license信息。
ahas.license=<license>
#配置公網地域。
ahas.regionId=cn-public
若在公網地域,需要查看License信息。請在第三步:配置啟動參數區域查看(非公網地域不需要),具體請參見查看License。
可選:您可以自定義Spring Boot應用觸發限流、降級或系統保護規則時的處理邏輯。
若添加HTTP埋點,則使用Web Servlet Filter方式配置處理邏輯。具體操作,請參見Web Servlet Filter。
若添加自定義埋點,則使用注解方式配置處理邏輯。具體操作,請參見注解方式。
說明若未執行此步驟,當Web接口觸發流控降級規則時,返回默認的提示信息(狀態碼為429);注解方式接口默認拋出BlockException異常類的子類(觸發流控規則,則拋出流控異常FlowException;觸發降級規則,則拋出降級異常DegradeException),若方法未定義throws BlockException則會被JVM包裝一層UndeclaredThrowableException。
結果驗證
登錄AHAS控制臺,在左側導航欄選擇 ,若在應用防護頁面出現該應用的資源卡片且有數據上報,則說明接入成功。
地域與RegionId對應表
地域 | RegionId |
公網 | cn-public |
華東1(杭州) | cn-hangzhou |
華東2(上海) | cn-shanghai |
華北2(北京) | cn-beijing |
華北3(張家口) | cn-zhangjiakou |
華南1(深圳) | cn-shenzhen |
新加坡 | ap-southeast-1 |
德國(法蘭克福) | eu-central-1 |