阿里Sentinel入门教程
https://www.it610.com/article/1294173596180094976.htm
最近在学习阿里系的微服务组件,读了很多关于sentinel的文章感觉很好,遗憾的是网上理论文章太多缺少实践,今天我分享一个sentinel入门demo文章,以下将不再讲解任何理论只上干货,希望对想学习的朋友有所帮助。
一、sentinel 下载运行
1.1. 下载sentinel
首先访问 https://github.com/alibaba/Sentinel/releases 下载sentinel,我下载的是1.7.2版的。补充一下如果没有软件下载速度非常慢,很大可能会下载失败。
1.2. 启动运行
sentinel部署运行还是很简单的,它本身就是一个基于springboot开发的jar包,运行它只需要java -jar .\sentinel-dashboard-1.7.2.jar 即可,看到如下界面就说明已经启动成功了,其默认端口为8080,打开浏览器访问http://localhost:8080即能够发问到登录界面,用户名密码均为sentinel。
sentinel是一个懒加载框架,只有定义资源被访问后才会显示在界面中,第一次启动控制台界面为空。到此sentinel框架的下载运行就完成了是不是非常简单。
二、sentinel 流控规则
2.1. 创建java工程
(1)在pom.xml中引入依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
(2)在aplication.yml文件中开启sentinel支持
其中主要是如下来个配置,一个是让程序可以连接到sentinel的地址,另一个是开启微服务调用支持,它是可选项如果就是一个单体测试工程则可不写。
spring.cloud.sentinel.transport.dashboard = 127.0.0.1:8080
feign.sentinel.enabled = true
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 182.92.118.32:8848
sentinel:
transport:
dashboard: 127.0.0.1:8081 # 指向sentinel地址
server:
port: 8081
# 开启sentinel支持
feign:
sentinel:
enabled: true
(3)定义资源及兜底方法
在工程中新建一个controller在其中定义方法,并采用 @SentinelResource 注解定义资源,其中value值是资源名,blockHandlerClass 和 blockHandler分别是兜底类和兜底方法,采用兜底类较在业务类中为每个方法单独写兜底方法优点在于避免代码的侵入和膨胀。
TestController 测试控制器类
package microapps.cn.jmeter.conctroller;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import microapps.cn.jmeter.handler.CustomerBlockHandler;
import microapps.cn.jmeter.handler.CustomerFallbackHandler;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("user")
public class TestController {
@GetMapping("/add")
@SentinelResource(value="add"
,blockHandlerClass= CustomerBlockHandler.class
,blockHandler="handlerException")
public String testA(HttpServletRequest request) {
return "add";
}
}
CustomerBlockHandler 兜底类
package microapps.cn.jmeter.handler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import javax.servlet.http.HttpServletRequest;
/**
* 异常处理类
*/
public class CustomerBlockHandler {
/**
* 异常处理方法
* (1) blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,
* (2) 参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。
* (3) 注意对应的函数必需为 static 函数
* @param request
* @param blockException
* @return
*/
public static String handlerException(HttpServletRequest request,
BlockException blockException){
return "sentinel error";
}
}
2.2. 运行程序定义规则
一切准备妥当后启动工程访问http://localhost:8081/user/add
刷新sentinel控制面板,此时在左侧菜单栏会出现你的服务名和一堆菜单
依次点击簇点链接->流控,在弹出界面中设置流控规则,其中阈值类型QPS指的是每秒访问次数,单机阈值这里我写1,它的意思是add资源1秒仅允许访问一次,超过即受到流量控制返回在兜底方法中定义的错误信息。
到这里一个sentinel简单的入门例子就编写完毕了,希望对有需要的同学有所帮助。